diff --git a/module.json b/module.json index 6ed156db..42921c17 100644 --- a/module.json +++ b/module.json @@ -8,7 +8,7 @@ } ], "url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr", - "version": "9.3.5", + "version": "9.3.6", "esmodules": [ "wh4_fr.js", "modules/babele-register.js", @@ -120,7 +120,7 @@ } ], "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-3-5.zip", + "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-3-6.zip", "id": "wh4-fr-translation", "compatibility": { "minimum": "13", diff --git a/modules/babele-register.js b/modules/babele-register.js index ba475675..14621a56 100644 --- a/modules/babele-register.js +++ b/modules/babele-register.js @@ -248,16 +248,16 @@ Hooks.once('init', () => { let translw = translItem?.name || undefined if (translw && translw != s1) { let res2 = re.exec(translw); - transl = res2[1] + "(" + subword + ")"; + transl = res2[1].trim() + " (" + subword + ")"; } else { s1 = res[1].trim() + " ( )"; translItem = game.babele.translate(compData.metadata.id, { name: s1, type: "skill" }, true) translw = translItem?.name || undefined if(translw) { let res2 = re.exec(translw); - transl = res2[1] + "(" + subword + ")"; + transl = res2[1].trim() + " (" + subword + ")"; } else { - transl = res[1] + " (" + subword + ")"; + transl = res[1].trim() + " (" + subword + ")"; } } } @@ -366,7 +366,7 @@ Hooks.once('init', () => { translItem = game.babele.translate(compData.metadata.id, { name: s1 }, true) let translw = translItem?.name || undefined if (translw && translw != s1) { - transl = translw + " (" + subword + ")"; + transl = translw.trim() + " (" + subword + ")"; } } } @@ -424,7 +424,9 @@ Hooks.once('init', () => { if (trait_fr?.name && trait_fr?.name != name_en) { trait_fr.name = trait_fr.name || trait_en.name trait_en.name = nbt + trait_fr.name + special; - trait_en.system.description.value = trait_fr.system.description.value; + if ( trait_en.system?.description?.value) { + trait_en.system.description.value = trait_fr.system.description.value; + } if (trait_en.system?.specification && isNaN(trait_en.system.specification.value)) { // This is a string, so translate it //console.log("Translating : ", trait_en.system.specification.value); trait_en.system.specification.value = game.i18n.localize(trait_en.system.specification.value.trim()); diff --git a/modules/loadScripts.js b/modules/loadScripts.js index 260f92ee..ab29f805 100644 --- a/modules/loadScripts.js +++ b/modules/loadScripts.js @@ -1,5 +1,5 @@ export default function() { - mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isProjectiles && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\n// takes 3 Poisoned Conditions that cannot be resisted at first,\nawait this.actor.addCondition(\"poisoned\", 3)\n\n// recovers a number of Wounds equal to their Toughness Bonus,\nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n\n// and acquires the Régénération Creature Trait.\nconst hasRégénération = this.actor.has(\"Régénération\")\nif (hasRégénération === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\n let traitItem = trait.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n}\n\nthis.script.message(`

${this.actor.prototypeToken.name} a :\n

\n C’est à Ranald de décider si leur régénération peut dépasser leur empoisonnement.

\n

Lorsque tous les états Empoisonné sont perdus, la Régénération l’est aussi.

`,\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","07tvKnPT8ICtv2us":"if (args.test.result.misfire && args.test.result.roll !== 100) {\n delete args.test.result.misfire\n}","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\n{\n args.fields.modifier += 10;\n args.flags.quietenedApplied = true\n}","0BP5l7bIkf744G1k":"return !args.context.terror && !args.extendedTest?.flags.wfrp4e?.fear","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\", true, [\"system.lore.value\"])\n\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\n\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\n\nif (text == \"GM's Choice\")\n{\n return this.script.notification(text)\n}\n\nif (spellsWithLore.length > 0)\n{\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\n this.script.notification(selectedSpell.name);\n this.actor.createEmbeddedDocuments(\"Item\", [(await fromUuid(selectedSpell)).toObject()])\n}\nelse\n{\n ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)\n}","0H2syk6qc0sCY0pj":"if ( args.actor.has(game.i18n.localize(\"NAME.AA\"), \"talent\") ||\nargs.actor.has(game.i18n.localize(\"NAME.SecondSight\"), \"talent\") ) {\n\targs.modifiers.other.push({label : this.effect.name, value : 5, details : \"La Cible possède Harmonisation Aethyrique ou Seconde Vue\"});\n}","0IAc5VFR2ogXOaGE":"return args.characteristic != \"int\" || args.type != \"characteristic\"","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\nlet data = item.toObject();\ndata.system.specification.value = fixation.result;\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0NAD1LNcVyAZ1fC7":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\") && args.skill?.name !== game.i18n.localize(\"NAME.Résistance\");","0PzfGjGhHQbxEwlb":"this.item.update({\"system.AP\" : {lArm : 0, rArm : 0, lLeg : 0, rLeg: 0}});","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\nif (!table)\n{\n\treturn ui.notifications.error(\"Table de Mutation introuvable, veuillez vous assurer qu'une table avec la clé `mutatephys` est importée dans le monde.\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.notification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse\n{\n ui.notifications.error(\"Impossible de trouver l'objet : \" + uuid)\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effet.name} (Durée)`}));\n\nthis.effet.updateSource({\"duration.rounds\" : roll.total})","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","0amHqfjTRp5ff6Op":"let wounds = this.effect.sourceActor.system.characteristics.wp.bonus;\nthis.actor.modifyWounds(wounds);\nthis.script.message(`Soigne ${wounds} Blessures`);","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\n\nlet data1 = item1.toObject();\ndata1.system.location.key = this.item.system.location.key\n\nlet data2 = item2.toObject();\ndata2.system.location.key = this.item.system.location.key\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\n","0hAbiNR1nFkpFMRz":"if (!this.actor.has(game.i18n.localize(\"NAME.SecondSight\"),\"talent\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\", this.effect)","0hgTyeaEhMBLwzUn":"let fearCounter = this.item.effects.filter(i => i.name == this.effect.name).length;\n\nfearCounter += Number(this.actor.has(\"Peur\")?.system.specification.value) || 0\n\ngame.wfrp4e.utility.postPeur(fearCounter || 1, this.effect.name)","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\n{\n\targs.test.result.other.push(`${this.effect.name}: Echec Automatique`)\n}","0kUalAsb4OhtYbaJ":"return args.item?.system?.attackType == \"ranged\" && !this.actor.system.canFly.effects.filter(e => e.name == \"Flying\")[0].disabled","0uUxvBLJC76WIIBC":"let species = await ValueDialog.create({text : \"Saisir l'espèce cible (singulier)\", title : this.effect.name})\n\nthis.effect.updateSource({name : this.effect.setSpecifier(species)});","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\n{\n args.flags.strikeToStun = true\n args.fields.modifier += 20;\n args.fields.hitLocation = \"head\";\n}\nargs.fields.successBonus++;","0wR0LWpfhLFA240I":"let value = await ValueDialog.create({\n title : this.script.label, \n text: \"Notes de Victoire pour le Journal d'Expérience\"\n});\nvalue \n ? this.actor.system.awardExp(50, value) \n : this.actor.system.awardExp(50, this.script.label)","0wmIC2MssUX6LW3N":"if (args.test.options.doomboltRolled)\n{\n\targs.test.result.damage += 4;\n}","0yyofYHeDRQlFliO":"return args.context.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif ([\"fire\", \"electricity\", \"poison\"].includes(type))\n{\n args.applyAP = false;\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\nthis.effect.update({\"disabled\": state});\n\nif (state)\n return ui.notifications.info(\"Effet.CreatureBackInWater\", {localize: true})\n\nreturn ui.notifications.info(\"Effet.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.Tests.value.includes(\"Terrain\") || this.item.system.Tests.value.toLowerCase().includes(\"(any)\"))\n{\n let Tests = this.item.system.Tests.value\n let name = this.item.name\n\n // If name already specifies, make sure Tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let terrain = name.split(\"(\")[1].split(\")\")[0]\n tests = tests.replace(\"the Terrain\", terrain)\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n coastal : \"Littoral\",\n deserts : \"Déserts\",\n marshes : \"Marécages\",\n rocky : \"Rocailleux\",\n tundra : \"Toundra\",\n woodlands : \"Régions boisées\"\n }, this.item.img), 1, \"Choisissez un Terrain\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = tests.replace(\"Terrain\", choice[0].name + \" Terrain\")\n }\n }\n\n this.effet.updateSource({name})\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","1BT0MWM2cbhlEnrn":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 5,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 5,\n \"dex\" : 5,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\n let talents = (await Promise.tout([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\n\n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n\n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n }\n\n\n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n","1CeYp5MlPcH68UIw":"let characteristics = {\n \"ws\" : 15,\n \"bs\" : 10,\n \"s\" : 10,\n \"t\" : 15,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Intimidation\", \"Commandement\", \"Perception\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = [\"Vigilance\", \"Coude-à-coude\", \"Menaçant\", \"Robuste\"]\nlet trappings = [\"Arme simple\", \"Cotte de Mailles\", \"Chausses de Mailles\"]\nlet specialItems = [\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1Du4e27M8WgP2iui":"if (args.equipped === true && this.actor.name !== \"Kurgorn Three-eyes\")\n{\n this.actor.addCondition(\"blinded\", 1, {\"statuses\" : [\"blinded\", \"blind\"]})\n this.script.notification(`Aveuglé en portant ${this.item.name}`);\n}\n\nif (args.equipped === false && this.actor.name !== \"Kurgorn Three-eyes\")\n{\n this.actor.removeCondition(\"blinded\")\n}","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\nawait this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\nawait test.roll()\nif (test.succeeded)\n{\n this.effect.delete();\n}\n","1OpT3CXs07XFWWCT":"args.context.cardsharp = true;","1PPh4vHd5sPKtudZ":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\", this.effect)","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n}\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1UvL0XA1EpQtjDNn":"let effects = this.item.effects.contents.filter(i => i.id != this.effect.id);\n\nlet choice = await ItemDialog.create(effects, 1, {title : this.effect.name, text: \"Choisissez une Rune\"});\n\nif (choice[0])\n{\n choice[0].performEffectApplication();\n}","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effet.name, context : {failure: \"Gain de 1 état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n args.actor.addCondition(\"stunned\")\n}\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","1exiWlVUHsXDLLAH":"this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\nthis.actor.modifyWounds(healed)\nthis.script.message(`Soin de ${healed} Blessures`)","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\n\nlet loc = \"body\"\n\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\nthis.script.message(msg)\n\nlet Test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n\tthis.actor.addCondition(\"stunned\");","1l7Jz2ZHbAWko7Vm":"args.context.ballockKnife = true;","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\n args.data.damage -= 1","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choisir la localisation\");\n\nlet location = choice[0].id;\n\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\n\nif (itemTargeted)\n{\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\n}","1yOvw74jzFfaI87b":"return args.context.reload\n","20fvE9nJmcfGYVzw":"if ( args.totalWoundLoss > 0 ) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"average\"})\n await test.roll();\n if (!test.succeeded)\n { \n this.actor.addSystemEffect(\"gangrene\");\n }\n}","22PMOW0G5MWiBQmg":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nawait this.actor.createEmbeddedDocuments(\"Item\", [fear], {fromEffect : this.effect.id})","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\nargs.item.system.damage.value += `+${sl}`;","2AOo7KUyzMrgIlgM":"CorruptionMessageModel.createCorruptionMessage(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\n","2EAYX5G9Fh3HJwiP":"let broken = this.actor.hasCondition(\"broken\");\n\nif (broken) {\n broken.delete();\n this.script.notification(\"Etat Brisé supprimé.\");\n}","2Ej6LUqn8frTRURo":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {difficulty: \"hard\"})\nawait test.roll();\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"unconscious\");\n}","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2IPTF0akWw9y48br":"return !this.item.equipped.value \n || !args?.weapon\n || !([\"goblin\"].includes(args.target.Species.toLowerCase()))","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = this.item.specifier;\n if (!value)\n {\n value = await ValueDialog.create({text : \"Entrez la valeur d'Armure\", title : this.effect.name});\n }\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value, name : this.item.baseName});\n }\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true;\n\nif (args.context.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2S6XlGCdRlXuaaVw":"this.actor.system.status.corruption.value += 1","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\n{\n args.bleedingHand = true;\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\n if (!success)\n {\n args.abort = true;\n }\n}","2XXqxAF5s5Sws6qj":"this.actor.system.status.corruption.value += 2","2XaJNYUMQAmSOsqi":"const {targetUuid} = this.effect.flags.wfrp4e;\n\nif (args.attacker.uuid !== targetUuid) return;\n\nlet recordedWounds = this.effect.getFlag(\"wfrp4e\", \"damageToReturn\") ?? 0;\n\nrecordedWounds += args.totalWoundLoss;\n\nthis.effect.setFlag(\"wfrp4e\", \"damageToReturn\", recordedWounds);","2Yh4vQm0ZJukRH1x":"return !args.skill?.name.includes(\"Focalisation\");","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\n{\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","2kRwCc31fuZgrsy8":"CorruptionMessageModel.createCorruptionMessage(\"major\", this.script.getChatData());","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\n ui.notifications.notify(`${this.effect.name}: Gain de ${this.item.Advances} Avantage(s)`)\n this.actor.setAdvantage(this.item.Advances)\n }\n}","2uyajbon5QX1CewS":"return args.skill?.name == \"Voile (Aéronavale)\"","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yW0kuwLfgRzJR2S":"const duration = 3600 * (1 + Number(this.effect.sourceTest.result.SL));\nthis.effect.update({\"duration.seconds\": duration});","2yctEihGmdCfTTVx":"args.data.reversal = {allowed : true, if: \"success\"};\nargs.context.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\nif (wounds.value == 0)\n return this.script.notification(\"Aucun effet à 0 Blessures\", \"error\")\n\nthis.script.notification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\n{\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\n}","33US8YRgaMqYu2We":"return !args.context.handling","37UN17gb8suFeZIW":"this.script.message(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\nargs.actor.system.details.price.gc *= 1.1;","3CeKfDcMEVgQlcXm":"await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\", this.effect, {name: \"Haine (Tous les ennemis)\"});","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.Test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\nif (fatigue)\n{\n this.script.notification(\"Etat Extenué - Suppression de la condition Extenué, effet désactivé\")\n this.effect.update({disabled : true})\n await this.actor.removeCondition(\"fatigued\")\n}","3KH6OE7L7uJESI2Z":"if ([\"dragon\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.applyTB = false;\n args.opposedTest.result.other.push(\"Wyrmslayer: Ignore le BE contre les Dragons\")\n }","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3SuLF6SImYWEHMo2":"args.context.doombolt = true;","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\n\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\n\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\n{\n args.item.qualities.value.push({name : \"penetrating\"})\n args.item.qualities.value.push({name : \"impale\"})\n}","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3eSaX0BeaUalNkEP":"return args.context.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3ixqbsEMfSSTzAXU":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n difficulty: \"challenging\",\n context: {\n failure: \"Subi l'état @Condition[Fatigued] à cause de cauchemars.\",\n success: \"A souffert de cauchemars, mais a assez bien dormi.\"\n }\n});\nawait test.roll();\n\nif (test.failed) {\n await this.actor.addCondition(\"fatigued\");\n}","3j8yybMaAZSwzxIE":"let weaponData = await this.effect.setFlag(\"wfrp4e\", \"weaponData\", this.item.system.toObject());\n\ntry {\n\n\n await this.item.update({\n system: {\n \"weaponGroup.value\": \"throwing\",\n \"qualities.value\": this.item.system.qualities.value.concat([{ name: \"accurate\" }]),\n \"range.value\": \"SB * 3\",\n \"consumesAmmo.value\" : false\n }\n })\n\n let test = await this.actor.setupWeapon(this.item, {}, {resolveClose : true});\n await test?.roll();\n this.item.update({ system: this.effect.getFlag(\"wfrp4e\", \"weaponData\") })\n}\ncatch (e) {\n this.item.update({ system: this.effect.getFlag(\"wfrp4e\", \"weaponData\") })\n}","3jm0NoYpgB6ZuUSl":"args.context.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.message(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\nthis.actor.addCondition(\"ablaze\");","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3na3lnAt3bfysvcD":"const blinded = this.actor.hasCondition(\"blinded\");\nif (!blinded)\n this.actor.addCondition(\"blinded\");","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\nawait args.actor.addCondition(\"prone\")","42UATqzohYML6a9t":"if ( !this.actor.hasCondition(\"poisoned\") ) {\n\tthis.effect.delete();\n}","4AO7Fowek5sSmE4g":"const venomUUID = \"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\";\nconst venom = this.actor.itemTags.trait.find(t => t.name === \"Venin\");\n\nif (venom) {\n await this.effect.setFlag(\"wfrp4e-tribes\", \"venom\", {\n _id: venom.id,\n \"system.specification.value\": venom.system.specification.value\n });\n await venom.update({\"system.specification.value\": \"Difficult\"});\n} else {\n await this.actor.addEffectItems(venomUUID, this.effect, {\n \"system.specification.value\": \"Challenging\"\n });\n}","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4KYraZSHAEYmL6xx":"if (this.item.equipped.value && args.totalWoundLoss > 10) {\n args.totalWoundLoss = Math.min(10, args.totalWoundLoss)\n args.extraMessages.push(`${this.effect.name}: Perte de Blessures limitée à 10`)\n}","4MQ7u4INxp51oyyR":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Inspiring\", \"Déterminé\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","4OlwxU60UqKg81yb":"const target = args.actor;\n\nif (target.has(\"Éthéré\") || target.has(\"Corruption\")) {\n args.totalWoundLoss += 6;\n args.modifiers.other.push({label: this.effect.name, value: 6})\n}","4Q3Mp04O2sMgKv9x":"return !args.title.includes(\"Spellbreaking\")","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\nif (smoothing)\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4iu3CmOI19soOYuA":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : 0,\n \"int\" : -200,\n \"wp\" : -200,\n \"fel\" : -200\n}\nlet traits = [ {name:\"Armure\", value: 2}, {name:\"Fabriqué\"}, {name:\"Vision dans l'obscurité\"}, {name:\"Peur\", value: 2}, {name:\"Insensible à la douleur\"},{name:\"Mort-vivant\"},{name:\"Instable\"} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nupdateObj.system.characteristics.int.initial = 0;\nupdateObj.system.characteristics.wp.initial = 0;\nupdateObj.system.characteristics.fel.initial = 0;\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n {\n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n if (trait.disabled)\n {\n t.system.disabled = true;\n }\n items.push(t);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trait.name}`, {permanent : true})\n }\n}\n\n\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","4jLe2XZQVUB8LztP":"args.fields.slBonus += this.effect.getFlag(\"wfrp4e\", \"slBonus\") || 0;","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`});\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"bleeding\");\n}\n","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\nawait args.actor.addCondition(\"entangled\")","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \n this.effect.delete();","4ylzjgUdHY5D0yVh":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Langue (Bataille)\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [15, 15, 15, 15, 10, 15, 10, 10]\n\nlet talents = [\"Vigilance\", \"Maîtrise du combat\", \"Combat Instinctif\", \"Inspiring\", \"Déterminé\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = []\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"}))\n\nlet ride = await foundry.applications.api.DialogV2.confirm({title : \"Compétence\", content : \"Ajouter Chaos Steed et +20 en Monte (Cheval) ?\", window : {title : this.effect.name}})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Monte (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","55eYGvSXetDMK80S":"const diseaseIds = this.actor.items.filter(i => i.type == \"disease\").map(i => i.id)\nthis.actor.deleteEmbeddedDocuments(\"Item\", diseaseIds)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\nlet damage = args.totalWoundLoss;\nlet tb = sourceActor.system.characteristics.t.bonus\nargs.abort = `${this.effect.name}: Dégâts appliqués à ${sourceActor.name}`;\n\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\n\nthis.script.message(message.replace(`${tb} TB`, `${tb} × 2 TB`))\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\n this.script.message(`1 Point de Chance volé à ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n}","5GHQxfxlmjyt1fNq":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\")\nlet ids = await this.actor.createEmbeddedDocuments(\"Item\", [item1, item2], {fromEffect : this.effect.id})\nthis.actor.updateEmbeddedDocuments('Item', [ {_id: ids[0].id, 'system.specification.value': 16} ] )","5GP9UJMvBZv6kWtI":"this.script.message(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n\n\nlet msg = ``\nlet weapons = args.actor.itemTypes.weapon.filter(i => !i.system.location.value);\nlet armour = args.actor.itemTags.armour.filter(i => !i.system.location.value);\nfor(let item of weapons)\n{\n\tif (item.system.properties.qualities.shield)\n\t{\n\t\tawait item.system.damageItem(1, \"shield\");\n\t}\n\telse\n\t{\n\t\tawait item.system.damageItem(1);\n\t}\n\tmsg += `

${item.name} endommagé de 1

`\n}\nfor(let item of armour)\n{\n\tawait item.system.damageItem(1);\n\tmsg += `

${item.name} endommagé de 1

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JWC0l3JEpOsqbR9":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 0\n}\nlet skills = [\"Esquive\", \"Perception\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Fuite !\", \"Tireur de précision\"]\nlet trappings = [\"Arme simple\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","5JvKJZPcd6Hz5zvn":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 20,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Commandement\"]\nlet skillAdvancements = [15, 15, 10, 5]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Déterminé\"]\nlet trappings = [\"Cotte de Mailles\", \"Chausses de Mailles\", \"Coiffe de Mailles\", \"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = this.effect.name + \" \" + updateObj.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","5KIozV7HxyGvskeD":"args.data.reversal = {allowed : true, if: \"worse\"};","5KVslRqhqzuFLyk4":"if (!this.actor.has(\"Béni (Taal)\", \"talent\")) return;\n\nthis.actor.system.characteristics.wp.modifier += 15;","5LdJCKfQem1AQK24":"\nif (!args.flags.howlingWarpGale)\n{\n args.fields.modifier -= 10;\n args.flags.howlingWarpGale = true; // prevent double application\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += ` (Suivants de Tzeentch)`;\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\nanimosity.system.specification.value = \"Suivants de Nurgle\";\n\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll({allowInteractive : false});\n\nroll.toMessage(this.script.getChatData());\n\nlet mutations = [];\nlet msg = `

Mutations Acquises

`\nfor(let i = 0; i < roll.total; i++)\n{\n let item;\n let uuid;\n let result;\n if (i % 2 == 0)\n {\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\n }\n else\n {\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\n }\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n item = await fromUuid(uuid);\n if (item)\n {\n msg += `

@UUID[${uuid}]{${item.name}}

`\n mutations.push(item.toObject());\n }\n}\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\nthis.script.message(msg);","5MxRDXzUBPfp2KKD":"args.context.useOnesSupportive = true;","5ScjIdRUOxblHdWS":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","5XAYjiq1i4M7Ky7j":"const trait = this.actor.itemTags.trait.find(t => t.name === \"Régénération\");\nconst name = \"Régénération Pourrie\";\n\nif (!trait) return;\n\nconst effect = trait.effects.find(e => e.name === \"Régénération\");\nconst scriptData = effect.system.scriptData;\n\nscriptData[0].script = `\n let chatData = {whisper: ChatMessage.getWhisperRecipients(\"GM\")};\n let message = \"\";\n\n let Blessures = foundry.utils.duplicate(this.actor.status.Blessures);\n let regenRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\n let regen = regenRoll.total;\n\n if (Blessures.value >= Blessures.max)\n return;\n\n if (Blessures.value > 0) {\n Blessures.value += Math.floor(regen / 2);\n if (Blessures.value > Blessures.max) {\n Blessures.value = Blessures.max;\n }\n message += \\`\\${this.actor.name} regagne \\${regen} Blessures.\\`;\n\n if (regen === 10) {\n message += \"
De plus, il régénère une Blessure Critique.\";\n }\n } else if (regen >= 8) {\n message += \\`\\${this.actor.name} a obtenu un \\${regen} et regagne 1 Blessure.\\`;\n Blessures.value += 1;\n if (regen === 10) {\n message += \"
De plus, il régénère une Blessure Critique.\";\n }\n } else {\n message += \\`\\${this.actor.name} Résultat de régénération de \\${regen} - Aucun effet.\\`;\n }\n\n await this.actor.update({\"system.status.wounds\": Blessures});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(\"GM\")});\n`\n\nawait effet.update({\n name,\n \"system.scriptData\": scriptData\n});\n\nawait trait.update({name});","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\n\nif (!visor)\n args.fields.modifier -= 10;\nelse\n args.fields.modifier -= 20;","5dR7Erj3nwsxLAV7":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Inspiring\", \"Chanceux\", \"Déterminé\", \"Inébranlable\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","5gPAT5Bb2FvQwYNQ":"args.test.preData.reversal = {allowed : true, if: \"better\"};\nthis.effect.delete();","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\n{\n args.fields.successBonus += 1\n}\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\n{\n args.fields.modifier -= 10;\n}","5lpR78CLhYH6Mjnu":"if (this.actor.has(\"Arboricole\",\"trait\")) return\n\nthis.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.rOV2s6PQBBrhpMOv\", this.effect)","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\n\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\nlet selectedCrew = [];\n\nwhile (selectedCrew.length < rating && crewList.length) {\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\n} \n\nfor (let member of selectedCrew) {\n let actor = game.actors.get(member.id);\n actor.applyBasicDamage(9, {\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \n minimumOne: true, \n loc: \"roll\", \n suppressMsg: false, \n hideDSN: false \n });\n}","5uokSqQsjgMapnCi":"if (\n this.item == args.defenderTest.item\n && args.defenderTest.succeeded\n && args.defenderTest.item?.system?.attackType == 'melee'\n && (args.attackerTest.item.properties.qualities?.magical || args.attackerTest.item.properties.unusedQualities?.magical)\n)\n{\n args.opposedTest.result.other.push(`${this.effect.name}: détruit magique ${args.attackerTest.item.name}.`)\n}","5z5nGwZC5RIwokev":"this.script.message(await this.actor.applyBasicDamage(12, {suppressMsg: true, loc: \"roll\"}))","6136BMmiGLwZ16H1":"return !!args.skill","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\n{\n this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\n}","64aJznxPMUHAuf7F":"if (this.item.flags.runeOfLuck || this.actor.type != \"character\") return\n\nconst currentFortune = this.actor.status.fortune.value\nconst runesOfLuck = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst runeFortune = parseInt(runesOfLuck.length)\n\nif (args.equipped) {\n this.item.flags.runeOfLuck = true\n await this.actor.update({\"system.status.fortune.value\" : runeFortune + currentFortune})\n this.script.message(`Points de Chance augmentés de ${currentFortune} à ${runeFortune + currentFortune}.`)\n}\nelse\n{\n this.item.flags.runeOfLuck = true\n await this.actor.update({\"system.status.fortune.value\" : Math.max(0, currentFortune - runeFortune)})\n this.script.message(`Points de Chance réduits à ${Math.max(0, currentFortune - runeFortune)}.`)\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.Test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","6A6ddQDJo23oOWtK":"const SL = this.effect.getFlag(\"wfrp4e\", \"SL\") ?? 0;\n\nargs.fields.slBonus += SL;","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the utilisateur d Creature Trait.\nconst hasColdBlooded = this.actor.has(\"À Sang Froid\")\nif (hasColdBlooded === undefined)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n this.script.message(`

${this.actor.prototypeToken.name} a acquis le Trait de Créature À Sang Froid et peut annuler tout test de Volonté raté.

\n

Si ils gagnent une Condition Surpris, cette Condition n'est pas perdue la première fois qu'elle devrait l'être (ce qui est généralement à la fin du Round ou si la victime est attaquée).

`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n}","6AsCMHZ4IYPq7Uxf":"return args.skill?.name.includes(\"Focalisation\");","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils gagnent +1 point de Corruption si un Test d'exposition échoue, ce qui devra être appliqué manuellement.
S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[modérée]{Corruption Modérée}\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Utilisé)\"})\n this.script.message(`${this.item.name} porté par ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}","6EXkbVTRBhKTEu81":"if (!args.flags.bothEyes)\n{\n\targs.flags.bothEyes = true;\n\targs.fields.modifier -= 30\n}","6Fe8M5MdklKS2olx":"return args.characteristic != \"fel\"","6H6vNjzvMGl2ZqCR":"if (args.totalWoundLoss > 0)\n this.script.message(`Blade of Nurglitch: ${args.actor.name} doit réussir un Test d'Résistance de Difficulté (-10) ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","6HfCvw24X6oEe2vn":"if ([\"t\", \"s\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}","6LMzIdmCSYctgmGx":"const stupid = this.actor.items.find(i => i.name === \"Stupidee\");\n\nif (!stupid) return;\n\nawait stupid.update({\"system.disabled\": true});","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\n{\n this.effect.delete();\n}","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6P2QNPKfwQ1xwxZT":"args.fields.slBonus ++","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Régénération')\n\nif (regenerate)\n{\n let effect = regenerate.effects.contents[0]\n let scriptData = effect.system.scriptData;\n \n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\n}","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"ablaze\")","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez le Savoir d'Incantation\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.magicLores));\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6elUNF58TaiYjxcx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effet.name, context : {failure: \"GAin d'1 état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"stunned\");\n}","6frithfMs7Nbv0IZ":"args.fields.slBonus += this.effect.sourceActor.system.characteristics.fel.bonus;","6gRixT3zIOAberJb":"const disease = await fromUuid(\"Compendium.wfrp4e-soc.items.Item.8Q9JYtR1y3B5J6UH\");\nconst data = disease.toObject();\ndata.system.incubation.value = 0;\ndata.system.duration.active = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","6hAgggYpNR3r4QWC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0\")\nitem = item.toObject()\nlet species = args.actor.Species || \" de votre espèce\"\nitem.name = `Animosité (tous sauf ${species})`\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","6jcTzK1XEuWqAacN":"args.abort = true;\nthis.script.notification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag(\"wfrp4e\", \"location\")]}!`, \"error\")","6jp8slPU33oBQe1V":"return args.context.crewTest?.system.handling !== true;","6kifXp2jXEaQVJsg":"let useWard = await foundry.applications.api.DialogV2.confirm({\n\tcontent : `

Utiliser la Protection fournie par ${this.effect.name}?`,\n\twindow : {\n\t\ttitle : this.effect.name,\n\t}\n})\n\nif (useWard)\n\targs.ward = 9;","6maNAmREdataXmo4":"if (this.actor.system.status?.ward?.value) {\n this.actor.system.status.ward.value = Math.max(7, this.actor.system.status.ward.value-1);\n} else {\n this.actor.system.status.ward.value = 9;\n}","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.notification(\"Avantage retiré\")\n}\nelse\n{\n return this.script.notification(\"Pas assez d'Avantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","6nA5LPXneAahHX2W":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tlet sourceActor = this.effect.sourceActor;\n\tthis.script.message(await this.actor.applyBasicDamage(4 + sourceActor.system.characteristics.s.bonus, {suppressMsg : true}))\n}","6oSs8qKFNFz2lSmh":"if (args.actor.system.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value = 0;\n","6qJP0hpShEM43ohx":"const actor = args.actor;\n\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Océans)\")) {\n const loreTest = await actor.setupSkill('Savoir (Océans)', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'hard'},\n characteristic: 'int',\n });\n await loreTest.roll();\n\n if (loreTest.succeeded) {\n loreTest.result.other.push(`${actor.name} reconnaît l'attrait du Léviathan.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle: ` – ${this.effet.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait Test.roll();\n\nif (!Test.succeeded) {\n Test.result.other.push(`${actor.name} est devenu @Condition[Stunned] par la vue.`);\n test.renderRollCard();\n actor.addCondition(\"stunned\");\n}","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nitem = item.toObject()\n\nitem.system.specification.value = 10;\nitem.name += \" (Fire)\"\nfoundry.utils.setProperty(item, \"flags.wfrp4e.breath\", \"fire\")\n\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6xTtJEhRc4OjcDTf":"if (foundry.utils.getProperty(args.data, \"system.status.fortune.value\"))\n{\n\tthis.script.scriptNotification(\"Impossible de mettre à jour la Chance\");\n\tdelete args.data.system.status.wounds.value;\n}","713v1T8HNste94pr":"args.context.grudge = true;","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\n{\n ValueDialog.create({text : \"Entrez les Blessures Perdues pour gagner des DR\", title : this.effect.name}, \"0\").then(async value => {\n value = Math.clamp(value, 0, 3)\n if (value == 0)\n {\n return;\n }\n else if (Number.isNumeric(value))\n {\n this.script.notification(`Lost ${value} Wounds`)\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.Test.addSL(value);\n args.Test.preData.other.push(`${this.effect.name}: +${value} SL`)\n }\n })\n}","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\n\nif (args.equipped)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption Modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}","7OmrMjaU48o2FEZi":"\nthis.actor.characteristics.t.bonus = 10\n\nthis.actor.details.move.value = 0;\nthis.actor.details.move.walk= 0;\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7T3iXgrL72fea67C":"const bloodyFluxUUID = \"Compendium.wfrp4e-core.items.Item.herUmN51D9TiL2Vn\";\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"easy\"},\n context: {\n success: `Butcher est soigné.`,\n failure: `Butcher contracte @UUID[${bloodyFluxUUID}].`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n await this.actor.addEffectItems(bloodyFluxUUID, this.effet);\n} else {\n const SL = Test.result.SL;\n const heal = 1 + SL;\n await this.actor.modifyWounds(heal);\n this.script.message(`Butcher a soigné ${heal} Blessures.`);\n}","7UUS0gX2Pbi0HHiz":"return args.skill?.name !== game.i18n.localize(\"NAME.Swim\");","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.notification(`SSuppression de ${poisoned.conditionValue} états Empoisonnés`)\n poisoned.delete();\n}\nelse\n this.script.notification(`Aucun état Empoisonné à supprimer.`)","7ZoFUMDG2WJd8RMg":"this.script.message(`Bonus utilisé : ${this.effect.name}`);","7ateEtT5HXg1vObY":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\") && !args.flags.infighter) \n{\n args.fields.modifier += 10;\n args.flags.infighter = true;\n}\n\nargs.fields.successBonus += 1; ","7n3SEAGRA5ESK8gV":"args.context.disarm = true;","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\nlet match = result.description.match(/b>([^<]+)/i);\nlet key = match[1];\nlet roll = new Roll(\"5d10\");\nlet value = undefined;\n\nawait this.script.message(result.description, {flavor: result.title});\n\nswitch (key) {\n case 'Triopmhe de Stromfels!':\n value = 0;\n break;\n case 'Stromfels monte!':\n await roll.evaluate();\n if (this.actor.system.status.mood.value > 0)\n value = -roll.total;\n else if (this.actor.system.status.mood.value < 0)\n value = roll.total;\n break;\n case 'Aucun effet.':\n break;\n case 'Manann est provoqué!':\n await roll.evaluate();\n value = -roll.total;\n break;\n}\n\nif (roll._evaluated)\n await roll.toMessage();\n\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the utilisateur d Creature Trait.\nconst hasutilisateur d = this.actor.has(\"Insensible à la douleur\");\nif (hasutilisateur d === undefined)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n this.script.message(\n `

${this.actor.prototypeToken.name} a acquis le Trait de Créature Insensible à la douleur. Cet\n effet dure une heure, après quoi il se dissipe et l'effet complet\n de toutes les blessures du buveur s'abat d'un coup.

\n

Notez que cela n'empêche pas l'utilisateur d'acquérir une Blessure Critique\n ou d'en mourir. Cela leur permet simplement d'ignorer la plupart\n de leurs effets.

`,\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\n}","7y89OcMmGbjRMgTg":"return !this.item.equipped.value \n || !args?.skill\n || !([game.i18n.localize(\"NAME.Charm\"), \n game.i18n.localize(\"NAME.Intimidate\"), \n game.i18n.localize(\"NAME.Leadership\")].includes(args.skill.name))","873KaarAnJ2qf1r2":"args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 1})","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8BCzpjFU0GeA17Wp":"args.fields.modifier +=20;","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\nlet types = {\n none : \"None\",\n cold : \"Froid\",\n corrosion : \"Corrosion\",\n fire : \"Feu\",\n electricity : \"Électricité\",\n poison : \"Poison\",\n smoke : \"Fumée\",\n various : \"Divers\"\n}\nif (!type)\n{\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choisir Souffle\"))[0]?.id;\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\n}\n\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\n{\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\n}","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n\targs.fields.modifier -= 10;\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8R7O63iC0yANtkJ9":"if (this.item.equipped.value && this.actor.hasCondition(\"ablaze\"))\n{\n await this.actor.removeCondition(\"ablaze\")\n this.script.notification(`Ne peut recevoir un état En Flammes`,\"info\");\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8TRiAJ8thIKE4IoL":"\nlet SL = Number(foundry.utils.getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\n\nargs.actor.characteristics.i.modifier += 10 * SL\nargs.actor.characteristics.ag.modifier += 10 * SL","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\n{\n args.actor.addCondition(\"ablaze\")\n}","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Range)\n if (Number.isNumeric(range))\n {\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\n }\n}","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\n\nif (APIgnored)\n{\n args.modifiers.ap.ignored += APIgnored\n args.modifiers.ap.details.push(`${this.effect.name}: Ignore les PA avec des points faibles (${APIgnored})`)\n}","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\nargs.item.system.qualities.value.push({name : \"impact\"})\n","8pbVGsVFlDebu2Ac":"args.wounds += 2;","8qOGotfGFA0HYQ6W":"let resistances = this.actor.itemTags.talent.filter(i => i.name == game.i18n.localize(\"NAME.MagicResistanceTalent\"));\n\nfor(let talent of resistances)\n{\n talent.system.max.value = \"custom\";\n talent.system.max.formula = \"@characteristics.t.bonus + 2\"\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\nif (caster)\n{\n let healed= caster.characteristics.wp.bonus\n this.actor.modifyWounds(healed);\n this.script.message(`${this.actor.prototypeToken.name} regagne ${healed} Blessures`)\n}","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\n\nif (weakpointsAP > 0)\n{\n args.modifiers.ap.ignored += weakpointsAP;\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore les points faibles (${weakpointsAP})`);\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\nitem.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8xqYrBIf1Zhlwizg":"const repaired_message = `

Ancre terminée.

`;\nconst test = 'Strength';\nconst difficulty = 'vhard';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n test: {\n value: test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\nthis.actor.characteristics.int.value= \"-\"\nthis.actor.characteristics.wp.value= \"-\"\nthis.actor.characteristics.fel.value = \"-\"","8zTkDVziBPaNbMQX":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 6, {text : \"Choisissez 6 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 9, {text : \"Choisissez 9 Sorts d'Arcane\"})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\nthis.actor.characteristics.s.calculationBonusModifier -= 1","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.failed && args.test.characteristicKey == \"wp\")\n{\n this.actor.addCondition(\"broken\")\n}","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\nawait this.script.message(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\n let data = item.toObject();\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\n data.system.description.value += \"

Ce talent s'applique à tout objet métallique en raison de Affinité Métallique

\"\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n})","9AMoFRATTAfdKlKN":"const test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain de 1 état @Condition[Poisoned].`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n args.actor.addCondition(\"poisoned\");\n const speaker = ChatMessage.getSpeaker({actor: args.actor});\n this.script.message(`

${speaker.alias} a reçu 1 état @Condition[Poisoned] de Venin d'Araignée.

Les victimes réduites à 0 blessures et qui souffrent d'un état @Condition[Poisoned] de ces flèches deviennent @Condition[Unconcious], mais ne risquent pas la mort à cause des états @Condition[Poisoned] restants comme ce serait normalement le cas.

`);\n}","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\nargs.actor.system.details.price.gc *= 1.1;","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.name += ` (En charge)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\n\tthis.script.notification(\"Effets secondaires appliqués\");\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.name += \" (No AP)\"\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\n","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9eL5JbQQmCY030ba":"this.actor.addCondition(\"poisoned\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","9fNHye2N2DORR0A3":"return !args.item.name.includes(\"Arme\")","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\n{\n this.script.message(`Gain de ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (args.Test.Échoué && this.actor.type == \"character\")\n {\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\n }\n}","A1odAcuRbq9797ZB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Mêlée (Base)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Mêlée (arme d'hast)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {\n title : \"Choix\"\n },\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mêlée (Base)
  2. \n
  3. Mêlée (arme d'hast)
  4. \n
\n `,\n buttons : [\n {\n label : \"Base\",\n callback : () => {\n return choice1;\n }\n },\n {\n label : \"Arme d'hast\",\n callback : () => {\n return choice2;\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","A3MW0UksYrHGa0Qw":"return [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic);","A3XrFB7SvV2vcg1a":"if (args.applyAP) \n{\n args.applyAP = false;\n}","A6DcKPzAGntzSCil":"let roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effet.updateSource({\"duration.rounds\" : roll.total})","ACtDCTLZXmd5uXjX":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Diviser les dégâts par deux ? (Divise tous les dégâts sauf le feu, le froid et la magie)\"})\n}\nelse\n{\n halve = false;\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par deux\", value : \"× 0.5\"})\n}","AFiB20FaOBmBv2Kz":"if (args.actorsystem.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value = Math.floor(args.actor.system.details.move.sail.value * .5);\n","AGD7zCyV4zruvnWu":"return args.type != \"cast\" || ![\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","AI6bFrjWk4NH9FBd":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","AI7iVbQMPzXMP5on":"const hours = new Roll(\"2d10\");\nawait hours.toMessage({flavor: this.effect.name + \" (heures)\"});\n\nconst bonus = new Roll(\"2d10\");\nawait bonus.toMessage({flavor: this.effect.name + \" (heures)\"});\n\n\nawait this.effect.update({\n \"duration.seconds\": hours.total * 3600\n});\nawait this.effect.setFlag(\"wfrp4e-tribes\", \"bonus\", bonus.total);","AMI2wDJqsIZsoq1e":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.message(`Emits a cloud of foul-smelling blackpowder. Enable the Fellowship Penalty Active Effect on @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","AS7CstSosuCrwZ19":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","AVROqafFhKjN6TPR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","AWgZnm9xLyIWCDnp":"let robust = args.modifiers.other.find(i => i.key == \"robust\")\nif (robust)\n{\n\trobust.value--;\n}\nelse \n{\n\targs.modifiers.other.push({key: \"robust\", label : this.effect.name, value : -1})\n}\n","AYEiCx2Es3QtMY28":"let choice1 = [\n {\n type: \"trait\",\n name: \"Bestial\",\n },\n {\n type: \"trait\",\n name: \"Regeneration\",\n },\n {\n type: \"trait\",\n name: \"Taille (Large)\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n console.log(\"WISH LIST2\", choice1, items);\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\n\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","AZGXrZOQ4EzjxRL9":"return true;","AaPPmnv7AtxsRVUs":"args.actor.details.move.value = 1;","Adgs6Zs0FdefO6qx":"if (args.test.options.pilot && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: SL limited to 1`)\n}","Ah2wyywkL8hjJNXM":"args.context.healWounds = true;","AjC4dsiuhVCOnRGI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","AmOMCUaWLJ2iJAt5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IFKWu98qmWpaSfUi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","AmpDbT0BkDHeaRzf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\");\nlet data = item.toObject();\ndata.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ApaLcUhuty3EzJoP":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","AqHLHp4kH6KULk3e":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.system.sourceData.item = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","AvRbjpBfTX3mn3bz":"if (this.actor.effects.contents.filter(e => e.name === \"Liquid Fortification\").length === 0) {\n let effectData = this.item.effects.contents[0].convertToApplied();\n effectData.duration.seconds = 3600\n this.actor.applyEffect({effectData : [effectData]});\n this.script.notification(\"Durée de l'effet Liquid Fortification réglée à 1 heure.\");\n}\nelse {\n let effect = this.actor.effects.contents.filter(e => e.name === \"Liquid Fortification\")[0];\n effect.update({duration: {seconds: 3600}});\n this.script.notification(\"Durée de l'effet Liquid Fortification réinitialisée à 1 heure.\");\n}","AyNb5sj6FD2Z3Q5T":"this.actor.addCondition(\"dead\")\nthis.actor.setWounds(0);\nthis.script.message(await game.wfrp4e.tables.formatChatRoll(\"scatter\"))","AyS3iLljxHRKsHg4":"let broken = this.actor.hasCondition(\"broken\");\nlet fatigued = this.actor.hasCondition(\"fatigued\");\nawait broken?.delete();\nawait fatigued?.delete()\nlet drilled = await fromUuid(\"Compendium.wfrp4e-core.items.Item.J9MK0AIaTbvd5oF6\")\nlet fearless = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet stout = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IogM5gnsoOX63w7j\")\nthis.actor.createEmbeddedDocuments(\"Item\", [drilled, fearless, stout], {fromEffect : this.effect.id})","B063u4vrbvzMaCQt":"args.item.system.flaws.value = args.item.system.flaws.value.concat([{name : \"bulky\"}, {name : \"unreliable\"}])","B1xgRS00RcTIZLnO":"return [\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\")","B87v1twc65qyvUWi":"args.fields.modifier += 10 * this.effect.conditionValue","BD7bVTU2pVoRSRBe":"let symptoms = {\n convulsions : \"Convulsions\",\n coughsandsneezes : \"Toux et Éternuements\",\n fever : \"Fièvre\",\n flux : \"FMalaiselux\",\n nausea : \"Nausée\"\n}\n\nlet roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nroll.toMessage(this.script.getChatData());\n\nlet choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, \"Choisir Symptômes\");\n\nif (choices.length)\n{\n let symptomEffects = foundry.utils.duplicate(game.wfrp4e.config.symptomEffects)\n let added = []\n for(let choice of choices)\n {\n let symptom = symptomEffects[choice.id];\n symptom.origin = this.effect.uuid;\n added.push(symptom);\n }\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", added)\n}\nelse\n{\n this.effect.delete();\n}\n","BEEvU2hE5ymcNOH9":"let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Exténué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","BHbFqhJPzZI2txLs":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 2\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","BVNKF9omCppWPLys":"let actor = game.user.character ?? canvas.tokens.controlled[0]?.actor;\nif (!actor || !(actor.system instanceof StandardActorModel))\n return ui.notifications.warn(\"Vous devez contrôler un acteur capable d'effectuer un test de Force\");\n\nlet test = await actor.setupCharacteristic(\"s\", {\n skipTargets: true,\n appendTitle: \" - Évacuation\",\n fields: {\n difficulty: \"challenging\"\n },\n context: {\n success: \"Réduction du niveau de Perforation !\"\n }\n});\n\nawait Test.roll();\nif (Test.succeeded) {\n let SL = parseInt(Test.result.SL);\n let name = this.effet.name.replace(/\\d+/, rating => parseInt(rating) - SL);\n await this.effet.update({name});\n}\n\nlet rating = parseInt(this.effet.name.match(/\\d+/)?.[0]);\nif (rating <= 1) {\n const scriptData = this.effet.system.scriptData\n scriptData[2].trigger = '';\n await this.effet.update({disabled: true, \"system.scriptData\": scriptData});\n}","BY4feKp244bQOWlB":"args.test.result.canDualWield = true;","BZETMpgrI5k1ol5b":"// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage.\nconst surprised = this.actor.hasCondition(\"surprised\")\nconst unconscious = this.actor.hasCondition(\"unconscious\")\nconst entangled = this.actor.hasCondition(\"entangled\")\nif (entangled || unconscious || surprised) return\n\n// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating.\nconst grimRating = parseInt(this.item.specification.value) || 1\nif (grimRating > this.actor.status.advantage.value) {\n this.actor.setAdvantage(grimRating)\n}\n","BcXTujburrHpjpwa":"args.fields.slBonus -= 3;","Be5rdfnZorbILhpC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 3 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Bexspr5viPhHiFmU":"let fatigued = this.actor.hasCondition(\"fatigued\");\nlet value = fatigued?.conditionValue || 0;\nargs.fields.modifier += value * 10;","Bj6bxItlgtI2sXVN":"let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage(this.script.getChatData());\nargs.totalWoundLoss = Math.max(0, args.totalWoundLoss - roll.total)\nargs.modifiers.other.push({label: this.effect.name, value : -1 * roll.total})\nthis.effect.update({disabled : true})","Bu0KUpGvfmFF7LJs":"let test = await this.actor.setupCharacteristic(\"s\", {appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"difficult\"}});\n\nawait Test.roll();\n\nif (Test.Échoué)\n{\n\n if (Test.isCriticalFumble == \"fumble\")\n {\n\t return this.script.message(`${this.actor.name} meurt alors qu'il est entraîné dans l'Aethyr (à moins qu'il ne dépense un point de Destinée pour éviter cela).`);\n }\n\n await this.script.message(await this.actor.applyBasicDamage(3, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\n\n}","Bv3431tnG3VKaTJr":"if (args.test.result.castOutcome == \"success\")\n{\n args.test.result.other.push(`@Peur[2,${this.actor.name}]`);\n}","ByhEa1BxQOyrOmqg":"return args.item?.attackType == 'melee'","BzDLuxBNw1QNIacg":"if (args.item.type == \"skill\")\n args.item.system.advances.value = 0\n\nif (args.item.type == \"talent\")\n args.item.system.tests.value = \"\"\n\nif (args.item.type == \"weapon\") \n args.item.system.qualities.value = []","C5NIkJwXL85Qbpe7":"args.weaponProperties.impale = true;","C69xngEMghfwUx13":"let easier = ['challenging', 'average', 'easy', 'veasy'];\nif (easier.includes(args.fields.difficulty))\n args.fields.difficulty = \"difficult\";","CCwuu3bPLCpVGAmb":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\n","CD4RnDpXZ9hnqVPQ":"if (!this.actor.hasCondition(\"entangled\"))\n this.actor.addCondition(\"entangled\");","CDASLC4fWKSGQKf9":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded?.getFlag(\"wfrp4e\", \"flockOfDoom\"))\n{\n blinded.delete();\n}","CHnaBPHk6HdFS512":"let arm = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\");\nlet leg = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\");\n\nlet choice = await ItemDialog.create([arm, leg], 1, \"Choisir le membre\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})","CIxZYkHggBQ6EsHP":"this.script.notification(\"Effet utilisé\");\nthis.effect.delete();","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\n\nlet lostFingers = this.actor.flags.useless[key] || 0;\n\nlostFingers += 1\n\nthis.actor.flags.useless[key] = lostFingers;\n\nif (lostFingers >= 4)\n{\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\n{\n if (effect.isCondition)\n {\n effect.delete();\n }\n}","CS6O7UUjQcUJoOUP":"if (args.test.failed)\n {\n let SL = Number(args.test.result.SL)\n if (SL <= -2 && SL > -4)\n this.actor.addCondition(\"stunned\")\n else if (SL <= -4 && SL > -6)\n this.script.message(this.actor.prototypeToken.name + \" Doit réaliser un test a FM être @Condition[Prone].\")\n else if (SL <= -6)\n this.actor.addCondition(\"unconscious\")\n }","CUBpU1imu2eRS06C":"if (args.opposedTest.attackerTest.weapon?.system.properties?.qualities.hack && !args.hackReminder)\n{\n args.hackReminder = true;\n args.opposedTest.result.other.push(`${this.effect.name}: Hack causes ${this.item.Advances} extra damage`)\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\n{\n this.actor.modifyAdvantage(-3);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Moderate Exposure to Corruption}`\n )\n this.script.message(`${this.effect.name}: \n @Corruption[moderate]{Moderate Exposure to Corruption}
\n ${args.actor.prototypeToken.name} must take an \n Corruption (Moderate) Test`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n}","Ca1fXHTA1e2QLx0D":"args.fields.modifier += 50;","CbfUDhUr5R4UnPPq":"if (this.actor && this.actor?.name !== \"Kurgorn Three-eyes\" && !this.actor.hasCondition(\"blinded\") && !args.itemUpdated)\n{\n this.script.notification(`Impossible de supprimer l'état Aveuglé.`);\n await this.actor.addCondition(\"blinded\", 1, {statuses : [\"blinded\", \"blind\"]})\n}","CcR9i3UzUXx7ieep":"args.fields.modifier +=10;","CicQ5REu9tbsc8wW":"const locations = [];\n\nfor (let [key, loc] of Object.entries(args.AP)) {\n if (loc.layers?.some(i => !i.metal && i.source?.system.tags?.has(\"armour\")))\n locations.push(key);\n}\n\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","Cjj4iLkdY1NaZRCi":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Projectiles\")))\n{\n let choice = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : `

Apply damage with ${this.effect.name} to attacker?`})\n\n if (choice)\n {\n this.script.message(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\n }\n}","ClkT2WG2UjVwQ97T":"if (args.actor.has(\"Démoniaque\")) {\n args.totalWoundLoss += 3;\n args.modifiers.other.push({label: this.effect.name, value: 3});\n}\n\nlet test = await args.actor.setupSkill(\"Résistance\", {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n characteristic: 't',\n context: {\n failure: \"Reçoit 1 État Aveuglé\"\n }\n});\nawait test.roll();\n\nif (test.failed) {\n args.actor.addCondition(\"blinded\");\n}","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","Cri5Q7ux6ni7zNVS":"// Cannot be Surprised in combat.\n\nif (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n ui.notifications.notify(`${this.effect.name}: Cannot be surprised`);\n}","CxsKWGwQqtAaQdzX":"return args.characteristic === \"fel\";","CynUM4ZEiB9QbNQq":"const bonus = game.settings.get(\"wfrp4e\", \"homebrew\").advantageBonus;\n\nargs.fields.modifier += 2 * bonus;","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\n\n","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Métier (Apothicaire)\" || args.skill?.name == \"Trade (Alchemist)\"","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\ntooth = tooth.toObject()\ntooth.system.specification.value = 3\ntooth.system.qualities.value = [{name : \"magical\"}]\n \nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nclaw = claw.toObject()\nclaw.system.specification.value = 4\nclaw.system.qualities.value = [{name : \"magical\"}]\nclaw.name = \"Claw\"\n\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DUFSlDO38fQWclBE":"// Characters wounded by the ravens gain the ability to read, understand and speak rudimentary Classical. \n// This ability does not last beyond this adventure.\n\nthis.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.61L9aX2z164cjm7K\", this.effect)\n\nthis.script.message(`${args.actor.name} gains the ability to read, understand and speak rudimentary @UUID[Compendium.wfrp4e-core.items.Item.61L9aX2z164cjm7K]{Classical}. This ability does not last beyond this adventure.`)","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \n{\n\tlet roll = await new Roll(\"1d10\").roll()\n\tawait roll.toMessage(this.script.getChatData());\n\tif (roll.total == 9 || roll.total == 10)\n\t{\n\t this.script.message(`${this.actor.name} attached to ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} gorges and falls off.`)\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \n\t}\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\n\nthis.item.updateSource({\"system.location.key\" : letter + \"Doigt\"})\n\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\nthis.script.message(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","Dk4VF4UXSMK5SaVP":"this.script.message(\"Activé pour annulé les Échecs critiques / Echecs\")\nthis.effect.update({disabled: true})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create({text : \"Sélectionnez la colonne de lancer pour déterminer la Tête de Bête\", title : \"Sélectionnez une Colonne\"}, \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\n\nif (column)\n{\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\n this.script.message(`${result.title}
${result.result}`);\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n let item = await fromUuid(uuid);\n if (item)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n this.item.delete();\n }\n}","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n fatigued.system.scriptData = fatigued.system.scriptData.filter(s => s.trigger != \"dialog\")\n fatigued.system._scripts = null;\n}","DvJvHsjgkzIfFaks":"if (!args.test.preData.options?.runeOfParrying) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","DxM3NRgQYc7moMPc":"this.actor.reset()","Dy67jQmeGwHwV9NY":"args.fields.modifier -=10;","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\n args.actor.addCondition(\"unconscious\");\n}","E0HHBSdQR3oH8KaL":"if (args.totalWoundLoss > 0) {\n let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\");\n frenzy = frenzy.toObject(); \n frenzy.effects[0].disabled = false;\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect : this.effect.id}); \n this.script.scriptMessage(\"Carnosaur gains Frenzy\");\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\n\nif (this.actor.system.status.advantage.value >= 3)\n{\n this.script.notification(`Ajout de ${frenzy.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\n}\nelse if (this.actor.system.status.advantage.value >= 1)\n{\n let data = hatred.toObject();\n data.system.specification.value = \"Opposants au corps à corps\"\n this.script.notification(`Ajout de ${hatred.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\n{\n blinded.delete()\n}","E33J9JixYVGxaktQ":"if (this.effect.getFlag(\"wfrp4e\", \"fistsOfGork\") && args.item.type == \"skill\" && args.item.name == \"Corps à corps (Bagarre)\") {\n\targs.item.system.modifier.value += this.effect.getFlag(\"wfrp4e\", \"fistsOfGork\")\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n fatigued.delete();\n this.script.notification(\"Retiré Exténué\")\n}","E6v4YZrvFikbdXoO":"const locations = [];\n\nfor (let [key, loc] of Object.entries(args.AP)) {\n if (loc.layers?.some(i => i.metal))\n locations.push(key);\n}\n\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7ksDLhihkJN4Vpt":"return args.characteristic != \"s\" || args.type != \"characteristic\"","EBNrA6FNX4d05EUx":"return !args.context.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\n\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Voies fluviales)\")) {\n const loreTest = await actor.setupSkill('Savoir (Voies fluviales)', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'hard'},\n characteristic: 'int',\n });\n await loreTest.roll();\n\n if (loreTest.succeeded) {\n loreTest.result.other.push(`${actor.name} reconnaît les leurres des Lurkerfish.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait Test.roll();\n\nif (!Test.succeeded) {\n Test.result.other.push(`${actor.name} est devenu fasciné par la vue et incapable d'effectuer une quelconque action autre que de se déplacer vers la lumière.`);\n Test.renderRollCard();\n actor.addCondition(\"unconscious\");\n}","ECUIJLcKt2TCSFS3":"return !args.weapon?.system?.attackType || game.settings.get(\"wfrp4e\", \"useGroupAdvantage\")","EHfOyVwYhFGWNjw1":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"difficult\"})\n await test.roll();\n if (!test.succeeded)\n {\n await this.actor.addCondition(\"poisoned\");\n }","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.Test.Échoué && args.Test.result.SL <= -3)\n{\n this.script.notification(\"Ajout de A Terre\");\n this.actor.addCondition(\"prone\")\n}","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\nlet data = item.toObject();\ndata.name += \" (Au choix)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\nthis.script.message(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`)\n\nthis.actor.hasCondition(\"bleeding\")?.delete()\nthis.actor.hasCondition(\"fatigued\")?.delete()\n","ERxrWzSpw8qwxFVi":"this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`); this.actor.addCondition(\"broken\");","ETfmit2Cx0Py77ai":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -25,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : -200,\n \"wp\" : -200,\n \"fel\" : -200\n}\nlet traits = [ {name:\"Fabriqué\"}, {name:\"Vision dans l'obscurité\"}, {name:\"Peur\", value: 2}, {name:\"Insensible à la douleur\"},{name:\"Mort-vivant\"},{name:\"Instable\"} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nupdateObj.system.characteristics.int.initial = 0;\nupdateObj.system.characteristics.wp.initial = 0;\nupdateObj.system.characteristics.fel.initial = 0;\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n { \n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n items.push(t);\n }\n else \n {\n ui.notifications.warn(`: -200\n}\nlet traits = [ {name:`, {permanent : true})\n }\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n","ETrfkHI0B9YjJqM2":"return this.item.equipped.value && this.actor.isOpposing && this.actor.attacker.test.item.attackType == \"melee\"","EXiqepAIXmbqMiKa":"if (args.opposedTest?.attackerTest?.weapon?.name.toLowerCase().includes(\"unarmed\")) {\n const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\n args.totalWoundLoss += sl;\n args.modifiers.other.push({label: this.effect.name, value: sl});\n}","EYny6z5oTOhxGDfb":"args.fields.modifier -= 10;\n","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\")\n}","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\nif (Test.succeeded)\n{\n this.script.message(\"Peut réaliser une Action ou un Déplacement (choisissez-en un)\")\n}\nelse\n{\n this.script.message(\"Ne peut pas réaliser une Action ou un Déplacement ce tour-ci\")\n}","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","ElHBPMMx37SZMvOC":"this.actor.addCondition(\"ablaze\");\nthis.script.scriptMessage(`${this.actor.name} has a received a @Condition[Ablaze]`)","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ErgOwSiVnm9VLVHN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","EsZx8cY34quYG4MQ":"let runes = this.actor.itemTypes[\"wfrp4e-dwarfs.rune\"]\nif (runes.length === 0) return ui.notifications.error(\"Cet acteur ne connaît aucune rune.\")\n\nlet rune = await ItemDialog.create(this.actor.itemTypes[\"wfrp4e-dwarfs.rune\"], 1, {text: \"Sélectionnez une Rune\", title: this.effect.name})\nrune[0].system.use({initialTooltip: \"Bonus Enclume de la Destinée\", fields: {modifier: 20}})","Et4tPHlrkueLqP3T":"if (args.item.type == \"skill\") args.item.system.modifier.value -= 10","EwD053Fyy46b59ZI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.6l3jvIAvrKxt0lA9\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eye6dranWpNsILjm":"if (this.actor.system.status.wounds.value <= 1)\n{\n this.effect.delete();\n}","F2u4L4o0r1LTWeWK":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la valeur de Terreur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","F4aGsdzJ9SYcX57F":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.HpFkVJ2lYPAWumUL\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","F7BHb4a7fqWMnYxH":"args.test.data.result.other.push(`You may not use Fortune Points because of ${this.effect.name}`);","F7E0Dr3sT7kkc2p7":"return this.actor.hasCondition(\"fatigued\")","F8Bmh6w01YvKsBIO":"for (const weapon of args.actor.itemTags.weapon) {\n weapon.system.qualities.value.push(\n {name: \"impale\", value: null},\n {name: \"penetrating\", value: null},\n );\n}","F9P8Nh4AKnqSGg8C":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.bxbTiLzbaz4vdukT\", // Hunter's Eye\n \"Compendium.wfrp4e-core.items.Item.XSb3QVB9ipPBFt56\", // Shadow\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","FAB12eLcSCAOOQwk":"this.script.scirptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true});","FAf4iXj5LkdvukS2":"fromUuid(\"Compendium.wfrp4e-wom.items.0Xdm4r7l2EwC4fcg\").then(item => Item.create(item.toObject(), {fromEffect : this.effect.id, parent : this.actor}))","FGIHAkNdYXbTnewG":"if (!game.settings.get(\"wfrp4e\", \"useGroupAdvantage\"))\n return;\n\n\nawait this.actor.modifyAdvantage(1);\nthis.effect.delete();","FKEH7DeqU0FH4dkk":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\n\nif (Test.Échoué) {\n \tthis.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));\n this.script.scriptMessage(`${this.actor.name} est victime de @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}`);\n}","FMA16PvoObBV8vDl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nitem = item.toObject()\nitem.system.specification.value = 20\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\nthis.script.notification(item.name + \" added\")","FMSN5uRskkATexzB":"game.wfrp4e.tables.rollToChat(\"crithead\")","FPQp6XfbUH1BMafj":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {fields : {difficulty : \"vhard\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"prone\");\n this.script.scriptMessage(\"Impossible de se déplacer ou d'agir ce tour\");\n}","FPYNcxm21678boLT":"if (args.attackerTest.data.preData.rollClass !== \"CharacteristicTest\") return;\nif (args.attackerTest.data.preData.characteristic !== \"s\") return;\n\nconst SL = args.opposedTest.data.opposeResult.differenceSL;\n\nconst targetId = this.effet.getFlag(\"wfrp4e\", \"target\");\nconst target = canvas.scene.tokens.get(targetId);\n\nif (SL > 4) {\n args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été forcé de laisser partir ${target.name}.`);\n return await this.effet.delete();\n}\n\nif (SL > 0) {\n args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été empêché de serrer ${target.name} pendant un tour.`);\n let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns + 1);\n}","FSqUqSByMiztYOQM":"if (args.totalWoundLoss > 0)\n this.script.message(`Infected: ${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.name = this.effect.name;\ndata.type = 'trapping';\ndata.system.trappingType = {value: 'clothingAccessories'};\ndata.system.equipped = {value: true};\n\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\neffectData.disabled = false;\neffectData.system.transferData.equipTransfer = true;\ndata.effects = [effectData];\n\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}","FbfJjYUyp0ArtZMb":"args.fields.modifier += 15","FciJSTq7dZsZIPgl":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FfTqCPxCoxwGDTQs":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","FiD3mvWIBHNNIuO9":"if (args.opposedTest.result.hitloc.value == \"body\")\n{\n if ((await new Roll(\"1d2\").roll()).total == 1)\n {\n args.opposedTest.result.hitloc.value = \"head\"\n this.script.message(`Localisation du coup changé pour la tête`)\n }\n}","FqevMs0ukQ9WuUHl":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (this.item.getFlag(\"wfrp4e\", \"brittle\"))\n{\n ChatMessage.create({content: `${this.item.name} shatters!`})\n this.item.update({name : `${this.item.name} (Shattered)`})\n}","FtZf56VI6Qsspu0D":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","FttdVBQiNssDAARh":"return args.data.targets[0]?.actor?.hasCondition(\"entangled\")","Fu8DTvSgLufcB5mr":"async function rollTable(characteristics, formula, name) {\n const roll = new Roll(formula);\n await roll.toMessage({flavor: name});\n\n const values = roll.dice[0].values;\n\n for (const value of values) {\n let characteristic;\n switch (value) {\n case 1: case 2: characteristic = \"ws\"; break;\n case 3: case 4: characteristic = \"i\"; break;\n case 5: case 6: characteristic = \"int\"; break;\n case 7: case 8: characteristic = \"fel\"; break;\n case 9: case 10: characteristic = \"*\"; break;\n default: continue;\n }\n\n if (characteristics.has(characteristic)) {\n await rollTable(characteristics, \"1d10\", name);\n } else {\n characteristics.add(characteristic);\n }\n }\n}\n\nconst characteristics = new Set();\nawait rollTable(characteristics, \"2d10\", this.effet.name)\n\nif (characteristics.has(\"*\")) {\n characteristics.delete(\"*\");\n const availableChoices = foundry.utils.duplicate(game.wfrp4e.config.characteristics);\n\n for (const ch of characteristics) delete availableChoices[ch];\n\n const result = warhammer.apps.ValueDialog.create({\n text: \"Choisissez une caractéristique\",\n }, \"\", availableChoices);\n\n if (!result) return;\n\n characteristics.add(result);\n}\n\nthis.effet.setFlag(\"wfrp4e\", \"characteristicsToSwap\", Array.from(characteristics));","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Divertissement (Chant)\";","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\nargs.actor.addCondition(\"ablaze\", ablaze)","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[1].convertToApplied();\n\teffectData.system.sourceData.item = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","G9ZPojp8qdjiXKZ5":"if (!args.test.preData.options?.masterslayer) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\n{\n\targs.fields.lostHand = true;\n\targs.fields.modifier += -20;\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\nawait test.roll();\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","GNgMG95jfabBeIwy":"if (!this.item.system.qualities.value.find(i => i.name == \"fast\"))\n{\n this.item.system.qualities.value.push({name : \"fast\"}) \n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\n{\n args.item.system.AP.head = 0;\n}","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.message(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n game.dice3d?.showForRoll(roll);\n this.script.message(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GYhPhHIVrhx4pkgF":"if (args.combat.combatant.actor.uuid === this.effect.sourceItem.parent.uuid) \n{\n this.effect.delete();\n}","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\n{\n let removeRepeater = false\n if(!this.item.system.offhand.value) // main\n {\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\n if (offhandUsed)\n {\n removeRepeater = true;\n }\n }\n else // offhand\n {\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\n if (mainhandUsed)\n {\n removeRepeater = true;\n }\n }\n \n if (removeRepeater)\n {\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\n }\n}","GePFbu5kp2ymGYEQ":"await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\", this.effect);","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjUD5L4h8FXGVgGQ":"args.initiative += \"+30\";","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\n\neffects.splice(effects.length - 1);\n\nif (effects.length == 0)\n{\n return this.script.notification(\"Tous les effets ont été utilisés. Réinitialisez pour les sélectionner à nouveau\")\n}\nlet choice = await ItemDialog.create(effects, 1, \"Choisir un effet à gagner\");\n\nif (choice[0])\n{\n choice[0].update({disabled : true})\n let effect = choice[0].convertToApplied();\n effect.name += ` (${this.effect.name})`\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\n}","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GsAyB5xnK3ASeoah":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'easy';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","Gsilp71BmIyHHce6":"args.context.masterslayer = true","GtfHQA9T1ip463le":"return ![\"ws\", \"bs\"].includes(args.characteristic)","GuSIY4Zqhc68qVEH":"if (!args.messageSent)\n{ \n args.messageSent = true;\n let runes = this.item.effects.contents.filter(i => i.name == this.effect.name);\n this.script.message(`${args.attacker.speaker.alias} reduce Run speed by ${runes.length * 4} yds.`)\n}","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\n\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Sélectionner un Vent\")\n//this.actor.createEmbeddedDocuments(\"Item\", items);\n\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\n\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\nif (bleeding)\n{\n this.script.notification(`Suppression de ${bleeding.conditionValue} états Hémorragique`)\n Saignement.delete();\n}\nelse\n{\n this.script.notification(`Aucun état Hémorragique`)\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\n{\n args.test.options.criminal = true;\n let currentCareer = args.test.actor.system.currentCareer;\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\n if (coin != \"g\") // Don't roll for gold, just use standing value\n {\n dieAmount = dieAmount + \"d10\";\n }\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\n let moneyString = `${moneyEarned}${coin}`\n let transactionString = `${moneyEarned}${term}`\n\n this.script.message(`Gain additionnel de ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\n test.roll();\n})","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\n\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\n\nthis.script.message(`Attaches to ${args.actor.name}`)","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","H8jDtK1Ewn4hL3A1":"args.fields.slBonus += 4;","HG2fKOfruT5QV3A4":"let lore = await ValueDialog.create({text : \"Choisissez un Savoir\", title : \"Savoir\"}, \"\", {\"fire\" : \"Fire\", \"death\" : \"Death\", \"metal\" : \"Metal\", \"shadow\" : \"Discret\"});\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 3, {text: \"Choisissez 3 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"\"]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 6, {text: \"Choisissez 6 Sorts d'Arcane\"})\n\nlet items = petty.map(i => i.toObject()).concat(arcane.map(i => {\n let spell = i.toObject();\n spell.img = `modules/wfrp4e-core/icons/spells/${lore}.png`\n spell.system.lore.value = lore;\n return spell;\n}));\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([warhammer.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), warhammer.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une Compétence\")\n\n items = items.map(i => i.toObject())\n items.forEach(i => i.system.advances.value = 20)\n\nitems.forEach(i => i.system.equipped.value = true)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","HOt2hHOiHDZ7oBgW":"if ([\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n{\n\targs.actor.details.move.value /= 2\n}\n","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\n{\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\n}","HYrl5aNMm8BAdqH7":"\n let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","HgzIi6m6dkXbVWHp":"if (args.test.skill?.name == \"Calme\")\n{\n args.test.preData.roll = 1;\n args.test.preData.other.push(this.effect.name)\n}","Hi005w1Ul17Q8Uty":"let test = this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n\tthis.effect.delete()\n}","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.notification(\"Etat Hémmoragique appliqué : 2 niveaux de saignement\")\n}","HoNTnPphrJISSQr1":"ChatMessage.create({content : \"Parle et fais toi connaître\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})","Hq1G30lhJYvtOSNb":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.preData.characteristic))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","HrYchgkdZBiu1yPF":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\");","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n this.actor.addCondition(\"bleeding\")","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'incanter un Sort ou d'utiliser un Prière\");\n}\nelse return true;","I2I4ZJjN3EUSow0t":"return args.item?.system?.attackType != \"ranged\"\n || this.item != args.item\n || this.actor.isOpposing","I67tdJctEqXSQPE0":"this.effect.update({\"disabled\": false})","I79D8V8OFzMCtL40":"const target = await ValueDialog.create({title: \"Sélectionnez une Cible\", text: \"Sélectionnez une Cible pour la Haine\"}, \"Target\");\nawait this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\", this.effect, {name: `Hatred (${target})`});","I8JS4z90PtWIG2nb":"return this.actor.hasCondition(\"prone\")","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n this.actor.addSystemEffect(\"convulsions\")\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} reçoit @Symptom[Convulsions] pour [[1d10]] heures`)\n }\n}","IDvpVMkR2HXoNpPp":"return args.skill?.name !== \"Esquive\";","IEDJHIYaZLhmrK4X":"return ![\"weapon\", \"cast\"].includes(args.type) || (!this.item.equipped.value)","IFXsTRAVDUeVvcRc":"let roll = await new Roll(\"1d100\")\nawait roll.evaluate()\nawait roll.toMessage({\"flavor\": `Wyssan's Dice Reversal`})\n\nif (roll.result % 11 === 0 || roll.result === 100) {\n await this.item.setFlag(\"world\", \"inert\", true)\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\n return\n\nlet reach = args.item.reach.value\nlet reachNum = game.wfrp4e.config.reachNum[reach]\nreachNum = Math.min(reachNum + 2, 7)\n\nlet key = warhammer.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\n\nargs.item.reach.value = key","IM8nRo6Jx2I8RJ0L":"return (args.item?.skillToUse?.name == args.skill?.name)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 2;\n","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IXXrxNSLqXEqtuDU":"if (args.actor.details.move.value > 1) {\n args.actor.details.move.value -= 1 \n}","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyPeur(value, name)\n })\n game.canvas.tokens.setTargets([])\n\n}\nelse \n{\n game.wfrp4e.utility.postPeur(value, name)\n}","IhoCoul5okDx0jBa":"if (args.test.weapon.properties.qualities?.blast) {\n args.test.weapon.properties.qualities.blast.value ++;\n if (args.test.options.shortfuse) {\n args.test.result.other.push (`${this.effect.name}: Blast Rating increased`)\n }\n args.test.options.shortfuse = true\n}","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 1\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkVcIRmmgQjsBUUf":"let roll = await new Roll(\"1d100\")\nawait roll.evaluate()\nawait roll.toMessage({\"flavor\": `Wyssan's Dice Reversal`})\n\nif (roll.result % 11 === 0 || roll.result === 100) {\n await this.item.setFlag(\"world\", \"inert\", true)\n this.script.message(`${this.item.name} loses its magical properties`, {blind: true, whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\nlet data = item.toObject();\ndata.system.specification.value = 3\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\n{\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\n}","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\nif (this.actor.flags.holed.reminded === true) return;\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nthis.script.message(`

${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.

`);\n\nthis.actor.flags.holed.reminded = true;","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\n{\n this.actor.removeCondition(\"broken\")\n this.script.scriptNotification(`Impossible de supprimer l'état Brisé`);\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\n\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\n{\n return;\n}\n\nlet god = await ValueDialog.create({text : \"Choisissez un Dieu\", title : \"Béni\"})\n\nif (god)\n{\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Chargement des Prières\", true, [\"system.type.value\", \"system.god.value\"])\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\n let configBlessings = await Promise.tout((game.wfrp4e.config.godBlessings[god.toLowerCase()] || []).map(fromUuid));\n if (god == \"Foi Antique\")\n {\n blessings = await ItemDialog.create(prayers.filter(i => i.system.type.value == \"blessing\"), 6, {text : \"Sélectionnez 6 Bénédictions\", title : \"Béni\"})\n }\n if (configBlessings.length)\n {\n // Combine blessings defined by config with actual blessing items found that specify this god, avoiding duplicates\n blessings = blessings.concat(\n configBlessings.map(i => {return {uuid : i.uuid, name : i.name}})\n .filter(bls => !(blessings.find(i => i.uuid == bls.uuid)))\n );\n }\n if (blessings.length)\n {\n this.script.scriptNotification(\"Ajout de \" + blessings.map(i => i.name).join(\", \"))\n await this.actor.addEffectItems(blessings.map(i => i.uuid), this.effet)\n }\n else\n {\n this.script.scriptNotification(`Impossible de trouver des Bénédictions associées à ${god}.`)\n }\n if (this.item.name.includes(\"Au choix\"))\n this.item.updateSource({name: this.item.name.replace(\"Au choix\", god)});\n else\n this.item.updateSource({name: this.item.name + ` (${god})`});\n await this.actor.update({\"system.details.god.value\": god})\n}","IurWrdbjsmMtTWuq":"return !this.actor.hasCondition(\"prone\")","IuxMr6SFdJhqFtVD":"this.actor.system.status.corruption.value += 3","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.concat(currentCareer.system.addedSkills).includes(skill);\nlet witchAdded = this.actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\twitchAdded[skill] = true;\n\tcurrentCareer.system.addedSkills.push(skill);\n\tfoundry.utils.setProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\n{\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n wardData = ward.toObject()\n wardData.system.specification.value = \"8\"\n \n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\n mrData = mr.toObject()\n mrData.system.specification.value = 2\n \n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\n}\nelse\n{\n this.effect.deleteCreatedItems()\n}","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","J8k4ahQdZhXDfU1l":"return args.skill?.name == \"Runesmithing\"","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\n\nlet options = {\n appendTitle : \" – \" + this.effect.name,\n skipTargets: true,\n fields: {difficulty: 'average'},\n characteristic: 'wp',\n}\n\nlet Test = await args.actor.setupSkill('Calme', options);\nawait test.roll();\n\nif (!test.succeeded) {\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\n const target = canvas.scene.tokens.get(targetId);\n await this.effect.delete();\n args.extraMessages.push(`${args.actor.name} perd ${args.totalWoundLoss} Points de Blessures lors de l'attaque, ce qui l'a forcé à lâcher ${target.name}.`);\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","JaiC5P6nIgctOacH":"if (args.actor.system.details.species?.value?.toLowerCase() == \"dwarf\")\n{\n args.weaponProperties.flaws.undamaging = true;\n}","JavuFNZ9Pj5elVLc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\nif (blinded)\n{\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\n blinded.system._scripts = null;\n}","JhbZWZhOJ23yOBmG":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'hard';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Lâche ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effet.updateSource({\"duration.rounds\" : roll.total})","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n this.script.message(`Impossible d'être surpris`);\n}","Jnp5c09sPzDD61EK":"this.script.notification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\n\nreturn true; // No need to show this in the dialog","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","K54XxyNJa5PIWDEH":"args.modifiers.other.push({label : this.effect.name, details : \"Blessures Doublées + 4\", value : args.totalWoundLoss + 4 });\nargs.totalWoundLoss = args.totalWoundLoss * 2 +4;","KD4nCSdSXJVJmk0R":"this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\nawait this.actor.addCondition(\"ablaze\")","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\nlet choice = [];\n\nif (!specification || specification == \"Compétences Entraînées\")\n{\n choice = await ItemDialog.create(ItemDialog.objectToArray({\n broken: \"Broken\",\n drive: \"Conduite d'attelage\",\n entertain: \"Divertissement\",\n fetch: \"Fetch\",\n guard: \"Garde\",\n home: \"Home\",\n magic: \"Magic\",\n mount: \"Mount\",\n war: \"War\"\n }, this.effect.img), \"unlimited\", \"Choisir un Entraînement\");\n}\nelse\n{\n choice = specification.split(\", \").map(i => {\n return {\n id : i.toLowerCase(),\n name : i\n }\n });\n}\n\nif (choice.length)\n{\n let changes = foundry.utils.deepClone(this.effet.changes);\n\n for(let training of choice)\n {\n switch(training.id)\n {\n case \"broken\" :\n let roll = await new Roll(\"2d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData());\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\n\n if (this.actor.type == \"creature\")\n {\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\n if (bestial)\n {\n bestial.update({\"system.disabled\" : true})\n }\n }\n break;\n\n case \"drive\" :\n\n break;\n\n case \"entertain\" :\n\n break;\n\n case \"fetch\" :\n\n break;\n\n case \"guard\" :\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effet.id})\n foundry.utils.setProperty(args, \"options.keepId\", true);\n break;\n\n case \"home\" :\n\n break;\n\n case \"magic\" :\n\n break;\n\n case \"mount\" :\n\n break;\n\n case \"war\" :\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\n break;\n }\n }\n this.effet.updateSource({name : `${this.effet.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\nif (!table)\n{\n\tui.notifications.error(\"Impossible de trouver la table des Mutations Mentales\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.notification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse\n{\n ui.notifications.error(\"Impossible de trouver l'objet : \" + uuid)\n}","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n }}));","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += ` (Disease)`;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSGIwJxR0qn10RLX":"this.actor.itemTags.template.find(t => t.name === \"Hungry Troll\").delete();","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\nthis.actor.hasCondition(\"deafened\")?.delete()\nthis.actor.hasCondition(\"unconscious\")?.delete()","KkE8DtsTDYDyk1gN":"args.data.reversal = {allowed : true, if: \"better\"};","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Utilise ${this.effet.name}`, fields: { difficulty: \"difficult\" } }).then(async Test => {\n await Test.roll()\n if (Test.Échoué)\n {\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\n this.script.message(`${this.actor.prototypeToken.name} Perte de ${toughnessLost} Endurance`)\n }\n })\n }","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\n{\n\targs.flags.lostFingers = true;\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KxIRA51YA0rktcSP":"return args.characteristic === \"fel\"","KyswmGj1uG3QS3ng":"args.applyAP = false;","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L41ao2Mw1miE0yri":"let roll = await new Roll(\"15\").roll();\nroll.toMessage(this.script.getChatData());","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","L9pUSX8Z4y2zIAn7":"this.actor.system.characteristics.int.value = 50","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","LLqAT9wEUGMLfDhU":"return !args.item?.system.isProjectiles","LNxKkPI37im0bSjy":"const ablaze = Number(args.opposedTest.result.differenceSL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": \"\n + ablaze + \" @Condition[Ablaze] Conditions\")","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\n{\n this.script.message(`${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n\tlet stuns = Math.max(1, Math.abs(Test.result.SL))\n\tthis.actor.addCondition(\"stunned\", stuns)\n}","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\n\nargs.fields.successBonus += 2 + amount;","Lh3Ccqx3utIu6w0d":"if (!args.ablazeApplied)\n{\n args.ablazeApplied = true;\n await args.actor.addCondition(\"ablaze\");\n}","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \n{\n this.actor.addCondition(\"unconscious\");\n}\nelse \n{\n this.actor.addCondition(\"prone\");\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\n\nif(career)\n{\n career.system.current.value = true;\n}","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\n{\n await args.opposedTest.swap(this.effect.name);\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\n\nif (caster)\n{\n let bonus = caster.system.characteristics.wp.bonus\n this.actor.modifyWounds(bonus)\n\n this.script.message(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.message(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\n this.effect.sourceItem.delete();\n }\n}","M6sb1yAdEAMlIvac":"return args.item?.system?.attackType == \"ranged\" && this.item.equipped.value","MB058H6OslhfBmxR":"console.log(args)\nreturn args.item?.system?.attackType == \"melee\"","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyTerror(value, name)\n })\n game.canvas.tokens.setTargets([])\n}\nelse \n{\n game.wfrp4e.utility.postTerror(value, name)\n}","MI2GgNi3fZtUCtQD":"return [\"int\", \"wp\"].includes(args.characteristic)","MIhYSuJ6MI9B65UT":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.2 * specification);","MKxYbHOrv0UuA7JB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Blessé\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Contraction de \" + disease.name)\n })\n }","MOZn375tGD2060cC":"const diff = foundry.utils.diffObject(this.item.toObject(), args.data);\nif (args.data?.system?.APdamage?.head > this.item.system.APdamage.head) {\n const result = await game.wfrp4e.tables.rollTable('armet-damage');\n this.script.message(result.result);\n if (result.total > 5) \n delete args.data.system.APdamage.head;\n}","MPK7U4HLmIAsjdqs":"if (args.applyAP)\n{\n args.modifiers.ap.ignored += 2\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore 2 PA\");\n}","McLR9YcgVUG3MooC":"args.applyTB = false;","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\nlet critTable = `crit${this.generalizeTable(loc)}`;\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\n\nthis.script.message(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\n{\n this.script.notification(\"Immunisé à l'état En Flames\")\n await this.actor.hasCondition(\"ablaze\")?.delete()\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils ne peuvent pas lancer de sorts ni prier pour des Bénédictions et des Miracles.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[modérée]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","MgTqCMRjxhezT73T":"return args.fields.hitLocation == \"head\" && args.weapon?.system.properties.qualities.pummel","MgZreqq3Jua10c8s":"return ![\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","Mhb67xufvA9uWO21":"let actorTaille = game.wfrp4e.config.actorTailleNums[args.actor.details.size.value]\nlet attackerTaille = game.wfrp4e.config.actorTailleNums[args.attacker.details.size.value]\n\nif (attackerTaille > actorTaille)\n{\n args.actor.addCondition(\"prone\")\n this.script.message(`Tail Attack: ${args.actor.prototypeToken.name} is now Prone`)\n}","Mir4FMHQRdVqazAF":"let actorTaille = game.wfrp4e.config.actorTailleNums[args.actor.details.size.value]\nlet attackerTaille = game.wfrp4e.config.actorTailleNums[args.attacker.details.size.value]\n\nif (attackerTaille > actorTaille)\n{\n let msg = `Attaque de Langue: ${args.actor.prototypeToken.name} est maintenant @Condition[Entangled]`;\n await args.actor.addCondition(\"entangled\");\n if (actorTaille <= 2)\n {\n msg += `et @Condition[Engaged]`\n }\n this.script.message(msg, {speaker : {alias: args.attacker.prototypeToken.name}})\n}","MkEcdViivk7abf1x":"args.actor.flags.meleeDamageIncrease += 1","MnXny8SCh6OceJc9":"return args.characteristic == \"int\"","MnqQkXVp20Lw84I1":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.message(await this.actor.applyBasicDamage(3, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","Mqbjr3t7IXwFnfCv":"if (this.item.flags.runeOfIron) return\n\n\nconst runesOfIron = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst ironWounds = parseInt(runesOfIron.length * 2)\nconst currentWounds = this.actor.system.status.wounds.value\n\nif (args.equipped) {\n this.item.flags.runeOfIron = true\n this.actor.modifyWounds(ironWounds)\n}\nelse\n{\n this.item.flags.runeOfIron = true\n this.actor.modifyWounds(-ironWounds)\n if (ironWounds > currentWounds) {\n this.script.message(`You have removed ${ironWounds} Wounds by unequipping Runic Armoour, but you only had ${currentWounds} Wounds remaining. This may trigger a critical injury.`)\n }\n}","Msygc7oQQPB5fw0b":"let test = this.effect.sourceTest;\nif (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n{\n\tlet points = await new Roll(\"1d10\").roll({allowInteractive : false});\n\tgame.dice3d?.showForRoll(points)\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value + points.total})\n\tthis.script.message(`Gain de ${points.total} Corruption`)\n}\nelse\n{\n\tlet points = this.effet.sourceTest.result.overcast.usage.other.current;\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value - points})\n\tthis.script.message(`Perd de ${points} de Corruption`)\n}","MwUzyAgd0yPnmZCH":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx\")\nlet data = item.toObject(); \ndata.name = data.name.replace(\"Target\", \"Strangers\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","Myl1Ishu9GBraYUZ":"this.actor.removeCondition(\"bleeding\")","N2MeOlf0GjPiRcSb":"let test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : \"Lâche l'objet\"}})\nawait test.roll();","N6E9Jsd8n2ubCfz8":"for(let key in this.item.system.AP)\n{\n this.item.system.AP[key]++;\n}","N7nGncsPrTz2ZbDA":"return !args.context.dodge || !this.actor.isMounted","N8hA6ysHCTlLd8Kj":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 15,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Savoir (Magie)\" , \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\nlet talents = [\"Magie des Arcanes\", \"Magie Mineure\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\", \"(2M) Bâton de combat\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","NEKLTgJJsayC7tpF":"return [\"ws\", \"ag\"].includes(args.characteristic);","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la valeur de Peur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","NMZ3Fb164tUfwChF":"return !args.data.targets[0]?.actor?.hasCondition(\"entangled\")","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n}\n ","NQSvFWhmBQAyx5Zz":"return args.item?.isProjectiles","NTFpkiGyBpOtrV0s":"if (this.actor.uuid == this.effect.sourceActor.uuid)\n{\n\treturn;\n}\n\nif (this.actor.has(\"À Sang Froid\") && !this.actor.hasSystemEffect(\"nausea\")) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {appendTitle : `- ${this.effect.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n\n let myRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\n let duration = myRoll.total\n this.actor.addSystemEffect(\"nausea\");\n this.script.scriptMessage(`Symptome Nausée ajouté, durée : ${duration} heures`);\n}\n}\nreturn false;","NX9fApO15NQuTipW":"return [\"ws\", \"bs\"].includes(args.characteristic)","Na7Nanl9YmxZlTo7":"return args.type != \"cast\" && args.type != \"channelling\"","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nacutesense = acutesense.toObject();\nacutesense.name += \" (Smell)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\nconst sl = message.system.sl;\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","Np25JqEiaoqerEk8":"if (test.result.tables.miscast) {\n test.result.other.push(`${this.effect.name}: You may reroll any result from the @Table[waaagh-miscast]{Waaagh! Miscast Table}.`);\n}","NqFvdCKDLqIXaE9m":"return args.weapon?.system.isMelee;","NrVFrIXM8GnIbojv":"args.item.system.damage.value += `+ ${this.actor.system.characteristics.fel.bonus}`;","Nuth9S5UHIhpEuIC":"args.fields.modifier -= 20","NvaPNfZt5d9RqKSE":"if (args.test.isCritical) {\n args.test.result.tables.critical.modifier \n = (typeof args.test.result.tables.critical.modifier ==='undefined') \n ? 20 \n : args.test.result.tables.critical.modifier + 20\n}","O45vpR4jDbQQnmvJ":"let items = [];\n\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += \" (Suivants de Khorne)\";\n\nitems.push(etiquette);\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\nanimosity.name = animosity.name.replace(\"(Target)\", \"(Suivants de Slaanesh)\");\n\nitems.push(animosity);\n\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\n","O7lXFZLrLdFaShGR":"args.context.catfall = true;","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\nlet biteData = bite.toObject();\nlet venomData = venom.toObject();\n\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\nvenomData.system.specification.value = \"Average\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","OBF6r2CsMOEokAsS":"args.weaponProperties.damaging = true;\nargs.weaponProperties.impale = true;","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OEy2lxvic37dRBEt":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 Sorts d'Arcane\"})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","OF4sSVOvHoKuPk7L":"if (this.item.flags.burning) return\nconst runesOfBurning = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst ablaze = runesOfBurning.length\nargs.actor.addCondition(\"ablaze\", ablaze)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": \"\n + ablaze + \" @Condition[Ablaze] Conditions\")\nthis.item.flags.burning = true","OFViRemr1cpnO3af":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"bleeding\");\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = foundry.utils.duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\nlet regen = regenRoll.total;\n\nif (Blessures.value >= Blessures.max)\n return\n\nif (Blessures.value > 0)\n{\n Blessures.value += regen\n if (Blessures.value > Blessures.max)\n {\n Blessures.value = Blessures.max\n }\n message += `${this.actor.name} regagne ${regen} Point de Blessures.`\n\n if (regen == 10)\n {\n message += `
De plus, il guérit d'une Blessure Critique.`\n }\n}\nelse if (regen >= 8)\n{\n message += `${this.actor.name} a fait un ${regen} et regagne 1 Point de Blessures.`\n Blessures.value += 1\n if (regen == 10)\n {\n message += `
De plus, il guérit d'une Blessure Critique.`\n }\n}\nelse\n{\n message += `${this.actor.name} a fait un ${regen} et ne régénère pas de Point de Blessures.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": Blessures })\nthis.script.message(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","OJMgS8ZQv0j4tEFf":"return [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","OMAUX1fnHyIpplul":"return ![\"fel\", \"dex\"].includes(args.characteristic)","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","OYLqLl6vikJD8flg":"const crowd = this.effect.getFlag(\"wfrp4e\", \"crowd\") ?? 0;\nconst bonus = 2 + Math.floor(crowd * 0.1);\n\nargs.fields.slBonus += bonus ;","OYRUSP7Q0Je0jdCY":"let species = await ValueDialog.create({text : \"Entrez l'Espèce Cible\", title : this.effect.name})\n\nthis.effect.updateSource({name : this.effect.setSpecifier(species)});","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \nawait test.roll();","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\nargs.actor.system.characteristics.t.value += 30\n\nargs.actor.system.characteristics.s.bonus += 3\nargs.actor.system.characteristics.t.bonus += 3\n\nif (args.actor.system.characteristics.s.value > 100)\n{\n args.actor.system.characteristics.s.value = 100\n args.actor.system.characteristics.s.bonus = 10\n}\n\nif (args.actor.system.characteristics.t.value > 100)\n{\n args.actor.system.characteristics.t.value = 100\nargs.actor.system.characteristics.t.bonus = 10\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\n{\n\tthis.script.notification(\"Disabled!\");\n\tawait this.effect.update({\"disabled\" : true})\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\n ","OicQSEVZBbqLtrcf":"let choice = await ItemDialog.create(this.actor.itemTypes.critical, (this.effect.sourceTest.result.overcast.usage.other.current || 1), \"Choisir the Critique Blessures to heal (Impossible de reattach body parts)\")\n\nthis.script.message(`Soin de ${choice.map(i => i.name).join(`, `)}`);\nthis.actor.deleteEmbeddedDocuments(\"Item\", choice.map(i => i.id))","On1itZhp0AOzNyyc":"let test = await this.actor.setupSkill(\"Runesmithing\", {appendTitle: ` - ${this.effect.name}`});\nawait test.roll();\nthis.effect.update({\"disabled\" : true});","OnkEe4ISru1hjJWP":"this.actor.flags.useless[this.item.system.location.key] = true;","Op88kMtimSEWlY2h":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","OqxeuZfZDfm9ax6h":"this.actor.system.status.addArmour(1, {locations : \"head\", source : this.effect})","OsLXutfXyQCAkhAf":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'average';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","OvIELZLvnlN2H2uw":"args.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}});","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\n{\n this.actor.modifyAdvantage(-1);\n this.script.notification(`${this.actor.name} loses 1 Advantage`);\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\nthis.actor.addCondition(\"stunned\", roll.total)","PBW6IZtwawNHxB6y":"return args.context.dodge && this.actor.isMounted","PGHvFHBIygB5pnWT":"args.actor.addCondition(\"ablaze\", 1)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": Ajout d'1 état @Condition[Ablaze]\")","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\n\n attackerReach = warhammer.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = warhammer.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"(Savoir)\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choisir Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"Savoir\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \n (this.actor.isOpposing || args.test.context.defending) && \n args.test.result.roll % 11 == 0 && \n args.test.succeeded && \n [\"Langue (Magick)\", \"Esquive\"].includes(args.test.item?.name))\n {\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\n let text = `${this.effect.name}: Adding Unstable and Ward`\n args.test.result.other.push(text) \n this.script.notification(text);\n \n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n let wardData = ward.toObject();\n wardData.system.specification.value = 9;\n \n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\n let unstableData = unstable.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\n }\n","PjOi61gB2nSYooLs":"return this.sourceActor.uuid === this.actor.uuid || !args.item?.system?.isProjectiles;","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\n item = item.toObject()\n item.system.specification.value = this.actor.characteristics.ag.value\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Taille\")\n{\n let size = this.item.specifier;\n if (!size)\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorTailles, this.item.img), 1, \"Choisir Taille\");\n if (choice[0])\n {\n size = choice[0]?.name;\n }\n }\n this.item.updateSource({\"system.specification.value\" : size, name : this.item.baseName})\n this.effect.updateSource({name : this.effect.name + ` (${size})`})\n}","Pn5fekTbkwlr61XU":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Ingénieur)';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll({allowInteractive : false});\nlet mood = await new Roll(\"-2d10\").roll({allowInteractive : false});\n\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\n\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\n\nthis.effect.delete();","Puv2wLrSVe6b1jLf":"if (args.sizeDiff < 0 ) {\n args.damage += 3\n args.breakdown.other.push({label : this.effect.name, value : 3});\n}","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \n{\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\n let results = roll.results[0]\n\n this.script.message(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n })\n\n }\n\n","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * this.effect.system.condition.value","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\ndata.system.specification.value = \"Lorsque Seul\";\ndata.effects[0].disabled = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","QBBrzcSAe8QqE4WP":"const SL = this.effect.sourceTest.result.SL;\nconst damage = 8 + SL;\n\nawait this.actor.applyBasicDamage(damage, {loc: \"roll\"});\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Reçoit 1 état @Condition[Ablaze].`\n }\n})\n\nawait test.roll();\nif (test.failed) {\n await this.actor.addCondition(\"ablaze\");\n}","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 1;\n\nargs.actor.system.details.man -= 2;","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"alpha\": 0.5,\n \"animation\": {\n \"type\": \"\",\n },\n \"color\": \"#000000\",\n }}));","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\n","QKt9ZYpVpznncfJ1":"for(let key in this.item.system.AP)\n{\n if (this.item.system.AP[key])\n {\n this.item.system.AP[key]++;\n }\n}","QLBxcP85duX1Z7LX":"if (!args.item.actor?.has(\"Béni (Taal)\", \"talent\")) return;\n\nargs.item.system.AP.head = 3;","QLUaOkwuSPvBp7jU":"this.script.scriptNotification(\"Impossible d'attaquer des cibles qui ne sont pas Empêtrée\")\nargs.abort = true;","QNxmImpLTou6WdMQ":"let test = args.test\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\n test.result.other.push(\"Possibilité de faire un test de FM Difficile (-10) pour prévenir la Maladresse\")","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\n args.item.damage.value += \" + 1\"","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.notification(\"Aucun état sur cet acteur\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choisir un état\")\n\nif (choice[0])\n{\n\tthis.actor.removeCondition(choice[0].conditionId)\n}\n","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\n\n if (args.actor.details.move.value > 3)\n {\n args.actor.details.move.value -= 1;\n if (args.actor.details.move.value < 3)\n args.actor.details.move.value = 3\n }","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","QbIYnshWeP1U8SUy":"args.applyAP = false;\nargs.applyTB = false;","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n if (ones > SL) {\n args.test.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Unité du dé utilisée comme DR`)\n }\n}","Qk7t2l5ep9RDVpgE":"args.context.diceman= true;","QoEOxRruQXYrZrv3":"let filters = [\n {\n property : \"type\",\n value : \"skill\"\n },\n {\n property : \"name\",\n value : /Melee/gm,\n regex: true\n }\n]\n\nlet items = await ItemDialog.createFromFilters(filters, 2, {text: \"Choisissez 2 Compétences pour ajouter +20\"})\nitems = items.map(i => i.toObject())\nitems.forEach(i => i.system.advances.value = 20)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QqybHxNCzPEzG1Qh":"return args.context.dualWieldOffhand","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\n\nthis.script.message(content)","R32U01LBjBrK1pns":" const templateMap = {\n 'P2e7Yx98bK3u110a' : \"\",\n 'iuMp3KLaMT2WCmie' : \"4s01nHFKVKTEZd3B\",\n 'RBuYcT5tppwcmnC5' : \"h3yuJDWnixliXeBG\",\n 'vcGpNwNbhvfzVveQ' : \"7QrsbofccMOE1YsF\",\n 'jmhKZy0w9TzkEK9c' : \"scVTPVyDDbli4WZL\",\n '9Byj6k7SmdTYis2V' : \"4Cd7Dknee2WjReOo\",\n 'laJwc2l9tzJPgaaJ' : \"2hJ2a5YjbwZWWYrd\",\n }\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\n\n\n let templateItem = await warhammer.utility.findItemId(templateMap[template._id]);\n\n let bio =\n `\n

Template: ${template.text}

\n

Particularité physique: ${physicalQuirk}

\n

Éthique de travail: ${workEthic}

\n

Particularité de personnalité: ${personalityQuirk}

\n `\n\n this.script.message(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\n\n if (templateItem)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\n }","R3OfRdi6xv0e9mzB":"return args.item.name.includes(\"Arme\")","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 1\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","R8FBHZaaARA3z9pB":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'hard';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","R8ecKGRzOr4ThvVa":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Maintenance Crew Test';\nconst difficulty = 'hard';\nconst target = 80;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.message(\"Gain de 2 états Hémorragique\")\n}","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.message(`${this.item.name} Overloads!`)\n }\n}","RPqgRUkiLY5thVbC":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Strength';\nconst difficulty = 'average';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","RRK91ySi5SzYCRvy":"return args.weapon?.system.isProjectiles","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"disease\")\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choisir une maladie\")\n\nif (choice[0])\n{\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\n}","RUpVgB0czqg95K1Q":"if (this.item.system.protects[args.opposedTest.result.hitloc.value])\n{\n args.weaponProperties.qualities.penetrating = false;\n}","RZlMkxJz5apn0mUj":"return args.item?.system.attackType != \"ranged\"","ReJpL0IVesKUbXgj":"args.fields.slBonus -= 8;","RgNdS87nO7RVawuw":"this.actor.removeCondition(\"fatigued\", 1);","RlVvlmhOfscaJqCd":"const deletes = this.actor.itemTags.armour.map(a => {\n return {_id: a._id}\n});\nconst armourTrait = this.actor.itemTags.trait.find(t => t.name === game.i18n.localize(\"NAME.TraitArmour\"));\n\nif (armourTrait)\n deletes.push({_id: armourTrait._id});\n\nthis.actor.deleteEmbeddedDocuments(\"Item\", deletes);","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\n\nfor (let effect of holed) {\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\n}\n\nthis.script.notification(`Holed Ratings of ${this.actor.name} have been doubled.`);","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"system.transferData.type\" : \"crew\"})","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\nawait args.actor.addCondition(\"deafened\");\nawait args.actor.addCondition(\"stunned\");","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : -5,\n \"t\" : -5,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : -10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = []\nlet skillAdvancements = []\nlet talents = []\nlet trappings = []\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let Compétence = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == Compétence && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(Compétence)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg = ``\nlet armour = args.actor.itemTags.armour.filter(i => i.system.isMetal && i.system.isEquipped);\nfor(let item of armour)\n{\n\tfor(let key in item.system.AP)\n\t{\n\t\tlet AP = item.system.AP[key]\n\t\tlet damage = Math.floor(AP / 2);\n\t\tawait item.system.damageItem(damage, [key]);\n\t}\n\tmsg += `

${item.name} PA divisé par deux

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","RyQtuiRykUCQ6Xag":"if (!this.item.actor.name.includes(\"Brunner\")) return;\n\nargs.actor.addCondition(\"ablaze\");","S1QihXuvdEVzeRtB":"let dice = await new Roll(\"1d10\").roll()\nlet roll = dice.total\nlet talent \nlet message\nlet modifier = 0\n\nif (roll <= 3)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\n}\n\nelse if (roll <= 6)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.OEjUvJKi0xmBwbS2\")\n modifier = -3\n}\n\nelse if (roll <= 9)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mdPGZsn2396dEpOf\")\n modifier = -3\n}\n\nelse if (roll = 10)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\n modifier = -5\n}\n\nmessage = `${roll} Rolled, gain ${item.name}, ${modifier} Strength`\ndice.toMessage(this.script.getChatData())\n\nlet changes = foundry.utils.duplicate(this.effect.changes)\nchanges[0].value = modifier\n\nthis.effect.updateSource({changes})\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})\n\nthis.script.notification(message)","S1SQe0Do7ZcuNV5j":"if (![\"roll\", \"none\"].includes(args.fields.hitLocation))\n{\n args.fields.modifier += 20;\n}","S3DCTw4yJ85eSaKp":"this.actor.setupCharacteristic(\"s\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(test => test.roll())","S3Dev4hleOYqDNe9":"if (args.test.options.healWounds) {\n if (args.test.succeeded)\n {\n let wounds = this.actor.characteristics.int.bonus + Number(args.test.result.SL)\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n }\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`${this.actor.name} guéri ${wounds} Blessures du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n }\n}","S4793DLFhjMxpM8x":"return ![\"ws\", \"bs\"].includes(args.characteristic) && !args.item?.system.attackType && !args.context.dodge","S6tUyFJvGMV19mvP":"this.actor.status.addArmour(2, {source: this.effect})","S95QqpX1cZyIVCPy":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}\n\n","SGr50Hq1AHIEzIFN":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n int : game.wfrp4e.config.characteristics.int,\n fel : game.wfrp4e.config.characteristics.fel\n}, this.effect.img), 1, \"Choisir une caractéristique\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","SK8paBvnvc5YLFI1":"if (args.test.options.doombolt && !args.test.options.doomboltRolled)\n{\n\targs.test.options.doomboltRolled = true;\n\n\tlet test = await this.actor.setupSkill(`${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`, {fields : {difficulty : \"hard\"}, context : {failure : \"@Table[majormis]{Major Miscast}\"}});\n\tawait test.roll();\n\n\tif (test.succeeded)\n\t{\n\t\targs.test.preData.additionalDamage = 4;\n\t}\n}","SKn61f2ykhzuwMdw":"if ((args.test.result.roll % 11 == 0 || args.test.result.roll == 100) && args.test.failed)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n }\n}","SLy1Fs3oXcHgFgjK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet value = foundry.utils.getProperty(this.effect.sourceTest, \"result.overcast.usage.other.current\") || 1\ndata.system.specification.value = value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SO4Aa9argKbuO9rQ":"args.prefillModifiers.modifier -= 20","SPOkFWZWziZk5b7A":"return args.item?.system?.attackType != \"melee\"","SRmfstEs278bP9Pz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SSqGxyN9hw0HDmED":"this.actor.addCondition(\"prone\");","SThruXFhxUdNKCG4":"const test = await this.actor.setupCharacteristic(\"int\", {fields: {difficulty: \"easy\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait Test.roll();\n\nif (Test.Échoué) {\n this.actor.addCondition('stunned');\n}\n\nthis.script.scriptNotification(`${this.actor.name} échou au test d'INT et reçoit un état Sonné!`);","SUfCkHdJg7rttdM1":"let amount = this.effect.sourceActor.system.characteristics.fel.bonus;\nargs.actor.addCondition(\"blinded\", amount);","SWIJjM2RCmzfr64u":"if (args.test.result.hitloc.result == \"head\" && args.test.result.critical)\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40\n\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}\n","SefcrhXsdYGFcCW6":"args.actor.system.details.move.value -= 3;\nargs.actor.system.details.man -= 2;\nargs.actor.system.status.carries.max *= 2;","SjDNjLBGsd9fYObo":"args.applyAP = false;","SlrslcNdnYONcSH3":"let weapon = this.actor.itemTags[\"weapon\"].find(i => i.system.isEquipped);\nif (!weapon)\n{\n this.script.notification(\"Aucune arme équipée!\", \"error\");\n return;\n}\n\nif (await this.actor.spend(\"system.status.fortune.value\", 1))\n{\n let test = await this.actor.setupWeapon(weapon, {appendTitle : ` - ${this.effect.name}`, whirlwind: true});\n test.roll();\n}\nelse\n{\n this.script.notification(\"Pas assez de Chance!\", \"error\");\n}","SlzPn7ONIKab9URj":"if (game.combat.combatant?.actor?.uuid == this.actor.uuid)\n{\n \nthis.script.message(await this.actor.applyBasicDamage(2, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","SreM9Jyj2XZjoezH":"return args.item?.system?.attackType == \"ranged\"","Ssn21dxoMQiqD1y4":"return args.type == \"cast\" && args.item.lore.value == \"fire\"","StAderQaQQsxb6Rv":"let target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n this.script.notification(target.result);\n let hatred = this.actor.items.find(i => i.getFlag(\"wfrp4e\", \"fromEffect\") == this.effect.id)\n if (hatred)\n {\n hatred.update({\"system.specification.value\" : target.result})\n }\n}","SvFKt9hMcFQjeILA":"args.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","SwliIjjjFtZMnJH3":"return !args.weapon?.system.properties.qualities.hack || args.weapon?.system?.isProjectiles","T0KBl8iEkcPq08RI":"if (args.applyAP && args.modifiers.ap.magical)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.magical\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore les PA magiques (\" + args.modifiers.ap.magical + \")\");\n}","T4JEEDYCEIUbVHv4":"let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\n{\n CorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData());\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","TCgEBuMPPd5SLAsc":"args.fields.modifier -= 15","TCtXPvDpbfz1yrVZ":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (A deux mains)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\n let choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Corps à corps (Base)
  2. \n
  3. Corps à corps (A deux mains)
  4. \n
\n `,\n buttons : [\n {\n action : \"basic\",\n label : \"Base\",\n callback : () => {\n return choice1\n }\n },\n {\n action : \"twoHanded\",\n label : \"A deux mains\",\n callback : () => {\n return choice2\n }\n }\n ]\n })\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","TEiNj5FgkoD3YbhS":"this.actor.hasCondition(\"bleeding\")?.delete()","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, context: { failure: \"Goes Prone\" }})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"prone\");\n}","TIoUbjOtj7PTK2t8":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Butcher perd des dents.`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n const SL = Number(Test.result.SL);\n this.script.message(`Butcher perd ${SL} dents.`);\n}","TKjBb75exjae87fa":"args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 2})","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();","TSsHcn4EDulD03RU":"return !this.actor.hasCondition(\"fatigued\")","TXce477AiXHKbepk":"return args.type !== \"pray\" || args.item?.system?.type?.value !== \"miracle\" || args.item?.system?.god?.value?.toLowerCase() !== \"taal\";","TY0xSQ00XXyEr49r":"args.fields.slBonus += 1;","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","Td8M5K1P92GbM2IA":"if (!args.messageSent)\n{ \n args.messageSent = true;\n let runes = this.actor.effects.contents.filter(i => i.name == this.effect.name);\n this.script.message(`${args.attacker.speaker.alias} reduce Run speed by ${runes.length * 4} yds.`)\n}","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\nlet test = await this.actor.setupTrait(stomp)\nawait test.roll();","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\n \"ws\": 45,\n \"bs\": 30,\n \"s\": 35,\n \"t\": 45,\n \"i\": 30,\n \"ag\": 35,\n \"dex\": 25,\n \"int\": 25,\n \"wp\": 30,\n \"fel\": 25\n}\nfor (let char in this.actor.characteristics) {\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\n this.actor.characteristics[char].initial = gorCharacteristics[char]\n}","TpZItJ5Ugbazaobd":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\nthis.effet.updateSource({\"flags.wfrp4e.locations\" : locations})","TpgK2aAe93ui3Rbs":"if (args.test.isFumble && args.test.options.supercharge) {\n args.test.result.tables.misfire = {\n label : \"Raté (Surchargé)\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n } \n}","TwgdEucxcHloc4cX":"let choice1 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Jambières de cuir\"\n },\n {\n type : \"armour\",\n name : \"Calotte de cuir\"\n },\n {\n type : \"armour\",\n name : \"Veste de cuir\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plastron d'acier\"\n },\n {\n type : \"armour\",\n name : \"Brassards\"\n },\n {\n type : \"armour\",\n name : \"Heaume\"\n },\n {\n type : \"armour\",\n name : \"Jambières d'acier\"\n },\n]\n\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mailles
  2. \n
  3. Mailles et Cuir
  4. \n
  5. Plaques
  6. \n
\n `,\n buttons : [\n {\n action : 1,\n label : \"Mailles\",\n callback : () => {\n return choice1\n }\n },\n {\n action : 2,\n label : \"Mailles et Cuir\",\n callback : () => {\n return choice2\n }\n },\n {\n action : 3,\n label : \"Plaques\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","TxfmxDGBj04AQQpt":"let weapon = args.opposedTest.defenderTest.weapon\nif (\n !args.opposedTest.result.swapped && \n args.opposedTest.result.winner == \"defender\" && \n args.opposedTest.attackerTest.result.damage && \n weapon && \n weapon?.system.properties.qualities.fast\n )\n{\n await args.opposedTest.swap(this.effect.name);\n}","TzgmYRXFXRspIo1i":"this.effect.delete();","U1RUcgP8LD2qeGTm":"return !args.context.reload","U1UpSRJOSjPpO4HS":"let mutations = await warhammer.utility.findAllItems(\"mutation\", \"Loading Mutations\", true)\n\nlet roll = Math.floor(CONFIG.Dice.randomUniform() * mutations.length);\n\nthis.actor.createEmbeddedDocuments(\"Item\", [(await fromUuid(mutations[roll].uuid)).toObject()]);\nthis.script.notification(`Added ${mutations[roll].name}`)","U26XMie3Kjoddisj":"let stunned = this.actor.hasCondition(\"stunned\")\nif (stunned)\n{\n this.script.notification(`Suppression d'1 état 1 Sonné`)\n this.actor.removeCondition(\"stunned\");\n}\nelse\n{\n\tthis.script.notification(`Aucune état Sonné à supprimer`)\n}","U2xKn7R1gm8kiQm8":"this.actor.hasCondition(\"broken\")?.delete();\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","U5ndCwcJ1s3Ns26w":"args.item.system.qualities.value.push({name : \"magical\"});\nargs.item.system.damage.value += ` + ${parseInt(this.effect.sourceTest.result.SL)}`;\nargs.item.name += ` (${this.effect.name})`","UDPsaymtZf39UsMk":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" ce qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData());\n args.totalWoundLoss += roll.total;\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true, [\"system.lore.value\"])\n\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\nthis.script.notification(lore)\nif (lore == \"GM's Choice\") {\n return\n}\n\nelse if (lore == \"Magie des Arcanes (Domaine)\") {\n lore = \"Arcane\"\n}\n\nelse if (lore == \"Magie Mineure\") {\n lore = \"petty\"\n}\n\nelse {\n lore = lore.toLowerCase();\n}\n\nlet spellsWithLore = []\nif (lore == \"Arcane\") {\n spellsWithLore = spells.filter(i => !i.system.lore.value)\n}\nelse {\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\n}\n\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\n this.actor.setupCast(item).then(test => test.roll());\n})","UQtXuQmUlTyDKqhe":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 20,\n \"s\" : 0,\n \"t\" : 10,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 40,\n \"wp\" : 45,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Intimidation\", \"Langue (Magick)\", \"Language (Nehekharan)\", \"Savoir (Magie)\", \"Perception\"]\nlet skillAdvancements = [10, 20, 15, 15, 10, 10, 10]\nlet talents = [\"Magie des Arcanes (Domaine)\", \"Dur à cuire\", \"Menaçant\", \"Magie Mineure\", \"Lire/Écrire\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\"]\nlet specialItems = [ \n {name: \"Mouldering Robes\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Pouches containing ritual components\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Staff\", type: \"weapon\", damage: \"SB+2\"}, \n {name: \"Magie Noire (Nécromancie)\", type: \"talent\"},\n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = (await ItemDialog.createFromFilters(filters, 3, {text: \"Choisissez 3 Sorts Mineurs\"})).map(i => i.toObject());\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = (await ItemDialog.createFromFilters(filters, 2, {text : \"Choisissez 2 Sorts d'Arcane\"})).map(i => i.toObject());\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"name\",\n value: /^((?!\\().)*$/gm, // Remove tout spells with parentheses (tout arcane spells spells)\n regex: true\n },\n {\n property : \"system.lore.value\",\n value : \"necromancy\"\n }\n]\n\nlet necromancy = (await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez 1 Sort de Nécromancie\"})).map(i => i.toObject());\n\narcane.forEach(i => {\n i.img = \"modules/wfrp4e-core/icons/spells/necromancy.png\";\n i.system.lore.value = \"necromancy\";\n})\nlet spells = [...petty, ...necromancy, ...arcane];\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items.concat(spells));\n","UUHQRPRrrRSr9MIA":"const venomFlag = this.effect.getFlag(\"wfrp4e-tribes\", \"venom\");\n\nif (venomFlag) {\n this.actor.updateEmbeddedDocuments(\"Item\", [venomFlag]);\n}","UWrzokgabRKUpnkG":"return [\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","UXdlnmwVgjc1QpF2":"args.actor.system.details.move.value += 1;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.75);","UYLXm2W6jVn21Age":"args.fields.modifier += 40;","UfkysrAftCs09Fct":"return args.skill.name !== game.i18n.localize(\"NAME.Gamble\")","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","UlRSaZG4ZUU6fMND":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","UlygtNPSDlWPIFCI":",args.fields.slBonus++;,args.fields.slBonus++;,args.fields.slBonus++;","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Jambières de cuir\"\n },\n {\n type : \"armour\",\n name : \"Calotte de cuir\"\n },\n {\n type : \"armour\",\n name : \"Veste de cuir\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plastron d'acier\"\n },\n {\n type : \"armour\",\n name : \"Brassards\"\n },\n {\n type : \"armour\",\n name : \"Heaume\"\n },\n {\n type : \"armour\",\n name : \"Jambières d'acier\"\n },\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mailles
  2. \n
  3. Mailles et Cuir
  4. \n
  5. Plaques
  6. \n
\n `,\n buttons : [\n {\n action : 1,\n label : \"Mailles\",\n callback : () => {\n return choice1\n }\n },\n {\n action : 2,\n label : \"Mailles et Cuir\",\n callback : () => {\n return choice2\n }\n },\n {\n action : 3,\n label : \"Plaques\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","UsuwsmU1TUQLQVM2":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\nreturn !args.spell || (args.type == \"cast\" && [\"petty\", lore].includes(args.spell.system.lore.value));","UtqUthabeQ4rHDLQ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.tNWrJUOArwfWXsPw\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","Uvk1X7sEhvv77YkD":"if (!args.flags.distractingApplied)\n{\n args.fields.modifier -= 20;\n args.flags.distractingApplied = true;\n}","UwjkHRAQHESdYXJs":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}}));","Ux4buMc7llF1Kg8p":"if (!this.actor.hasCondition(\"stunned\") && !this.actor.hasCondition(\"unconcscious\"))\n{\n this.effect.delete();\n}","UxVfVoH7cbC9ESDr":"const test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain d'1 état @Condition[Stunned].`\n }\n});\n\nawait test.roll();\n\nif (test.failed)\n args.actor.addCondition(\"stunned\");","V0b4yLTawjCnm9ke":"if (args.opposedTest.attackerTest.result.critical\n || (args.totalWoundLoss > 0 && args.totalWoundLoss > args.actor.system.status.wounds.value))\n{\n await args.actor.corruptionDialog(\"minor\")\n}","V1D2Uo3WDKYQePU3":"let damage = this.effect.sourceTest.result.damage;\n \nlet loc = \"head\"\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\nthis.script.message(msg)\n","V2lsVTi6q28eL5jl":"args.fields.slBonus += parseInt(this.effect.sourceTest.result.SL)","V4PcjtHde941wv6J":"await this.actor.addCondition(\"prone\");\nconst SL = this.effect.sourceTest.result.slOver;\nconst stunned = 1 + SL;\nawait this.actor.addCondition(\"stunned\", stunned);\n\nif (stunned > this.actor.system.characteristics.t.bonus) {\n const crit = ` Critique`;\n\n const Test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effet.name}`,\n fields: {difficulty: \"average\"},\n context: {failure: `Encaisse ${crit} à la tête.`}\n })\n\n await test.roll();\n}","V7qmFwUMCY2tfziH":"this.actor.addCondition(\"stunned\")","V9wD9FWHWxZUOGSI":"let roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nlet fatigued = roll.total\nroll.toMessage(this.script.getChatData());\nif (fatigued > this.actor.characteristics.wp.bonus)\n{\n this.actor.addCondition(\"unconscious\")\n this.script.notification(`Tombe inconscient\" `)\n}\nelse\n{\n fatigued = Math.max(0, fatigued)\n if (fatigued)\n this.actor.addCondition(\"fatigued\", fatigued)\n this.script.notification(`Reçoit ${fatigued} états Extenué`)\n}","V9xm4X1x3lPYTQaI":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.notification(\"Immunisté à la Peur\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}","V9zm2hKUVLVZtAcN":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 15,\n \"i\" : 15,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charme\", \"Focalisation\", \"Entertain (Prophecy)\", \"Intuition\"]\nlet skillAdvancements = [0, 0, 20, 10]\nlet talents = [\"Détection d’artefact\", \"Menaçant\", \"Sixième Sens\"]\nlet traits = [\"Condamné\", \"Spellcaster (Lore of Life)\", \"Protection\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Forêt d'épines\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let Compétence = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == Compétence && i.type == \"Compétence\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(Compétence)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name +='Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","VAPsww9x3HAw1sKP":"return !args.context.dodge","VGuZMIR1lE8I1F1y":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n this.actor.addCondition(\"stunned\");\n}","VINX6TBAJQznhVcN":"const repaired_message = `

Le remplacement de ${this.item.name} par un équipement de fortune est terminé.

`;\nconst Test = 'Test de l\\'équipe de maintenance';\nconst difficulty = 'difficile';\nconst target = 80;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","VLdF2HPnCrNIgp7a":"let items = [];\n\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += \" (Followers of Khorne)\";\n\nitems.push(etiquette);\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\n animosity.system.specification.value = \"Followers of Slaanesh\";\n\nitems.push(animosity);\n\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\n","VOc9sKag2Vy4vGGZ":"let specifier = this.item.specifier;\nlet rune;\nlet categories = [];\nif (specifier && specifier.toLowerCase() != \"toutes formes\")\n{\n if (specifier.includes(\"Talisman\"))\n {\n categories.push(\"talisman\");\n }\n if (specifier.includes(\"Protection\"))\n {\n categories.push(\"protection\");\n }\n if (specifier.includes(\"Arme\"))\n {\n categories.push(\"weapon\");\n }\n if (specifier.includes(\"Armure\"))\n {\n categories.push(\"armour\");\n }\n if (specifier.includes(\"Engineering\"))\n {\n categories.push(\"engineering\");\n }\n\n if (categories.length)\n {\n let runes = await warhammer.utility.findAllItems(\"wfrp4e-dwarfs.rune\", null, true, [\"system.category\", \"system.master\"]);\n let choices = runes.filter(i => categories.includes(i.system.category) && i.system.master);\n\n if (choices.length)\n {\n rune = (await ItemDialog.create(choices, 1, {title : this.effect.name, text : specifier, indexed: true}))[0]\n } \n else \n {\n rune = await DragDialog.create({text : `Provide Master Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text : `Provide Master Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text : `Provide Master Rune to learn`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effect)\n\nlet talents = this.actor.itemTags.talent.filter(i => i.baseName == this.item.baseName);\nlet xpCost = talents.length * 100\n\nif (this.actor.type == \"character\" && (await foundry.applications.api.DialogV2.confirm({window: {title: this.effect.name}, content: `

Spend ${xpCost} XP for learning ${this.item.name}?

`})))\n{\n this.actor.update({\"system.details.experience.log\" : this.actor.system.addToExpLog(xpCost, this.item.name, this.actor.system.details.experience.spent + xpCost)})\n}","VRDS4lkwSAzbtvm4":"if (args.totalWoundLoss > this.actor.system.status.wounds.value || args.opposedTest?.attackerTest.result.critical)\n{\n args.extraMessages.push(`${this.effect.name}: Can reverse Critical Wound roll`)\n}","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VTzpExK3QSCaFQPf":"if (args.equipped) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\n let regen = item.toObject();\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\");\n let terror = item.toObject();\n terror.system.specification.value = 2;\n this.actor.createEmbeddedDocuments(\"Item\", [regen, terror], {fromEffect : this.effect.id});\n} \nelse \n{\n this.effect.deleteCreatedItems();\n}","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Ajouter PA de métal aux Dégâts\" })\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","Vb7rgl8T4VRswbnZ":"this.actor.status.addArmour(parseInt(this.item.system.specification.value) || 0, {source: this.effect, damage : this.item.getFlag(\"wfrp4e\", \"APdamage\")})","VbI0Al6rJfypV3qY":"const failure = game.i18n.localize(\"ROLL.ImpressiveFailure\");\nconst success = game.i18n.localize(\"ROLL.AstoundingSuccess\");\n\nargs.test.result.description = args.test.succeeded ? success : failure;","VcE8Hie2jbpuyuM3":"const vomit = this.actor.itemTags.trait.find(t => t.name === \"Vomissement\");\nconst name = \"Bileful rollTest\";\n\nif (!vomit) return;\n\nconst effect = vomit.effects.find(e => e.name === \"Vomissement\");\nconst scriptData = effect.system.scriptData;\n\n// REMINDER\n\nscriptData.push({\n label: 'Rappel des règles du sort',\n trigger: 'rollTest',\n script: `\n args.test.result.other.push(\"This rollTest attack follows the rules for the Lore of Nurgle spell @UUID[Compendium.wfrp4e-core.items.Item.XhyZ140R1iA1J7wZ].\");\n `\n});\n\n// /REMINDER\n\n// update Effect's name\nawait effet.update({\n name,\n \"system.scriptData\": scriptData\n});\n\n\n// update Trait's name\nawait vomit.update({name});\n\n// copy effect from Stream of Corruption spell\nconst effectData = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.XhyZ140R1iA1J7wZ.ActiveEffect.KAXAHr5NdusLTz6k\")).toObject();\n\nawait vomit.createEmbeddedDocuments(\"ActiveEffect\", [effectData]);","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \n\n attackerReach = warhammer.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = warhammer.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","W2rdTwflbUVxFyfd":"let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {context : {failure : this.actor.name + \" meurt de la Pourriture\"}, fields: {difficulty}, appendTitle : \" - Pourriture\"})\n await Test.roll();\n if (Test.Échoué)\n {\n this.actor.addCondition(\"dead\");\n }","W5qtA7Ul5cOj18Nd":"this.item.update({\"system.AP\" : {lArm : 3, rArm : 3, lLeg : 3, rLeg: 3}});","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}","WB6sIpLEPC8YPX67":"if (args.context.dodge)\n{\n\targs.abort = true;\n\tthis.script.notification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\n{\n args.item.system.qualities.value.push({name : \"magical\"})\n}","WO5n7Vbx8AgoVrwC":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Intuition\", \"Savoir (Local)\", \"Perception\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = []\nlet trappings = [\"Cotte de Mailles\", \"Chausses de Mailles\", \"Coiffe de Mailles\", \"Arme simple\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","WOpRJluHKER1MdgI":"let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {context : {failure : this.actor.name + \" meurt de la Pourriture\"}, fields: {difficulty}, appendTitle : \" - Pourriture\"})\n await Test.roll();\n if (Test.Échoué)\n {\n this.actor.addCondition(\"dead\");\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\n{\n\tthis.actor.addCondition(\"dead\");\n}","WR0Kqn8CF5iwToak":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'difficult';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","WaeL2I8VVJmBBKHk":"const vomit = this.actor.itemTags.trait.find(t => t.name === \"Vomissement\");\nconst name = \"Test de Corruption\";\n\nif (!vomit) return;\n\nconst effect = vomit.effects.find(e => e.name === \"Vomissement\");\nconst scriptData = effect.system.scriptData;\n\nscriptData[0].script = `\nargs.actor.addCondition(\"stunned\");\nargs.actor.corruptionDialog(\"moderate\");\n`\n\nawait effect.update({\n name,\n \"system.scriptData\": scriptData\n});\n\nawait vomit.update({name});","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","Wh1VV3javfzcV3bP":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true, [\"system.lore.value\"]);\n\nspells = spells.filter(i => [\"dark\", \"light\", \"fire\", \"life\", \"beasts\", \"shadows\", \"death\", \"heavens\", \"metal\"].includes(i.system.lore.value)).sort((a, b) => a.name > b.name ? 1 : -1);\n\nlet choices = await ItemDialog.create(spells, 7, {text : \"Choisissez 7 Sorts parmi toute combinaison de Magie de Couleur, Sorcellerie ou Magie Noire\", title : this.effect.name})\n\nthis.actor.addEffectItems(choices.map(i => i.uuid), this.effect)","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 3\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","WsN2R1qOzuLa2qyB":"let specifier = this.item.specifier;\nlet rune;\nlet categories = [];\nif (specifier && specifier.toLowerCase() != \"toutes formes\")\n{\n if (specifier.includes(\"Talisman\"))\n {\n categories.push(\"talisman\");\n }\n if (specifier.includes(\"Protection\"))\n {\n categories.push(\"protection\");\n }\n if (specifier.includes(\"Arme\"))\n {\n categories.push(\"weapon\");\n }\n if (specifier.includes(\"Armure\"))\n {\n categories.push(\"armour\");\n }\n if (specifier.includes(\"Engineering\"))\n {\n categories.push(\"engineering\");\n }\n\n if (categories.length)\n {\n let runes = await warhammer.utility.findAllItems(\"wfrp4e-dwarfs.rune\", null, true, [\"system.category\", \"system.master\"]);\n let choices = runes.filter(i => categories.includes(i.system.category) && !i.system.master);\n\n if (choices.length)\n {\n rune = (await ItemDialog.create(choices, 1, {title : this.effect.name, text : specifier, indexed: true}))[0]\n } \n else \n {\n rune = await DragDialog.create({text : `Provide Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text : `Provide Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text : `Provide Rune to learn`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effect)\n\nlet talents = this.actor.itemTags.talent.filter(i => i.baseName == this.item.baseName);\nlet xpCost = talents.length * 100\n\nif (this.actor.type == \"character\" && (await foundry.applications.api.DialogV2.confirm({window: {title: this.effect.name}, content: `

Spend ${xpCost} XP for learning ${this.item.name}?

`})))\n{\n this.actor.update({\"system.details.experience.log\" : this.actor.system.addToExpLog(xpCost, this.item.name, this.actor.system.details.experience.spent + xpCost)})\n}","WtbSIghR0q4euE7J":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula = `(${args.data.formula}) * 2`;\n}","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\n\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\n grim.update({\"system.specification.value\": 4});\n}\n\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\n grim.update({\"system.specification.value\": 2});\n}","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\nitem.name += ` (Disabled by ${this.item.name})`;","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","XCAfy460IotarQek":"return false;","XO9m2AvFRAAeEuty":"if (args.test.options.fieldDressing && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: SL limited to 1`)\n}","XPpHYTTT0hqYuSfa":"fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\").then(item => {\n item = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","XPxAKqPpPYE4E6B5":"args.fields.modifier -= 10 * this.effect.conditionValue","XRrGBbplNLZpXnCH":"let item;\nlet items = []\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\n{\n let data = item.toObject();\n data.system.specification.value = 2\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.mDgEMOoJpi8DkRYb\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\n{\n let data = item.toObject();\n data.system.specification.value = 2;\n items.push(data)\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","XSbQKrrbjsN15Zp9":"if (!args.messageSent)\n{\n args.messageSent = true;\n let advantage = this.item.effects.filter(i => i.name == this.effect.name).length;\n this.actor.setAdvantage(advantage)\n this.script.message(`Allies within 12 yards gain ${advantage} Advantage`)\n}","XXnzUdsIYQ9Wjyu0":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale || this.actor.sameSideAs(this.effect.sourceActor)","XYaYeiVkc5GKYTjC":"return args.spell?.system.lore.value != \"fire\"","XcvDYNZgJ2rpAdDV":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de malaise est présent.\")\n }","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\n{\n args.addImpact = true;\n args.opposedTest.result.other.push(\"Impact against Skaven\")\n}","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","XfSxXatjEYlPEbaK":"const broken = this.actor.hasCondition(\"broken\");\n\n//broken?.delete();","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","XjUXxUA0hbwjUatW":"if (this.actor.hasCondition(\"engaged\") && this.effect.disabled)\n{\n this.effect.update({\"disabled\" : false})\n this.item.effects.contents[1].update({\"disabled\" : false});\n this.script.notification(\"Enabled\")\n}\nelse if (this.effect.active && !this.actor.hasCondition(\"engaged\"))\n{\n this.effect.update({\"disabled\" : true})\n this.item.effects.contents[1].update({\"disabled\" : true});\n \n}","Xk9XPklxxTvFlwpI":"args.context.useOnesArgumentative = true;","XthZ3GCC3WhsEI2g":"args.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n}});","Xu5cED1MhT4ba7da":"args.fields.modifier += 10\n","XzJotwVUIuQu6b0G":"return !args.context.whirlwind || !args.weapon || !this.actor.has(game.i18n.localize(\"NAME.DualWielder\"), \"talent\") || this.actor.noOffhand","Y27MmN5KFw45d5vQ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"challenging\"})\nawait test.roll();\nif (!test.succeeded)\n{ \n let rollResult = await (await fromUuid(\"RollTable.GL7rKOEThauPUK0E\")).roll({allowInteractive : false});\n let diseaseId = rollResult.results[0].documentId;\n let disease = await fromUuid(\"Item.\"+diseaseId);\n obj = disease.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [obj]);\n}","Y43z8YCohJMA8Ia7":"if (!args.test.preData.options?.giantbane) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","Y6ppJBerpM3TtSic":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.g4Q6AtzZuo5iIvD4\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","Y7McxsHFeGhwQx0J":"this.actor.createEmbeddedDocuments(\"Item\", [foundry.utils.expandObject({\n name : \"Ghostly Flame\",\n type : \"weapon\",\n img : this.effect.img,\n system : {\n \"weaponGroup.value\" : \"throwing\",\n \"damage.value\" : \"SB + WPB\",\n \"qualities.value\" : [{name : \"magical\"}],\n \"equipped\" : true\n }\n})], {fromEffect: this.effect.id})","Y8J66v8VTKUASGuK":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.notification(\"Aucun état sur cet acteur\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choisir un état\")\n\nif (choice[0])\n{\n\tawait this.actor.removeCondition(choice[0].conditionId)\n}\n\nif (this.actor.effects.find(e => e.isCondition))\n{\n return false; // Delete the effect if there are still conditions, otherwise, effect remains and provides the bonus\n}","YDANERWYHyJ2ACeo":"args.fields.modifier -= 25","YHEIkBKWXKNPqglh":"if (args.test.result.castOutcome == \"success\")\n{\n CorruptionMessageModel.createCorruptionMessage(\"moderate\", this.script.getChatData())\n}\n","YJX7WnxzXXIVdH6P":"let lore = await ValueDialog.create({text : \"Choisissez un Savoir\", title: \"Savoir\"}, \"\", {\"fire\" : \"Fire\", \"death\" : \"Death\", \"metal\" : \"Metal\", \"shadow\" : \"Discret\"});\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 6, {title : this.effect.name, text : \"Choisissez 6 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"\"]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effet.name, text : \"Choisissez 12 Sorts d'Arcane\"})\n\nlet items = petty.map(i => i.toObject()).concat(arcane.map(i => {\n let spell = i.toObject();\n spell.img = `modules/wfrp4e-core/icons/spells/${lore}.png`\n spell.system.lore.value = lore;\n return spell;\n}));\n\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","YN8719gme9AxYtyY":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Commandement\", \"Savoir (Magie)\", \"Savoir (Théologie)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\n\nlet talents = [\"Harmonisation Aethyrique\", \"Diction Instinctive\", \"Diction Instinctive\", \"Chanceux\", \"Perception de la magie\", \"Menaçant\", \"Magie des Arcanes (Domaine)\", \"Magie Mineure\", \"Seconde Vue\", \"Sixième Sens\"]\nlet trappings = [\"Arme simple\", \"Robes\", \"(2M) Bâton de combat\"]\nlet specialItems = [ \n {name: \"Magic Item\", type: \"trapping\", trappingType: \"misc\" }, \n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\n args.test?.result?.other.push(\"Gain de +1 Corruption supplémentaire de \" + this.effect.name)\n}","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\nthis.script.notification(\"Etat Exténué ajouté\")","YaKnYEbmmZZtByJc":"if (args.opposedTest.attackerTest.options.ballockKnife)\n{\n args.weaponProperties.impale = true;\n args.extraMessages.push(`${this.item.name}: Impale Added`)\n}","YdiQFkm8j48Xs7gI":"if (args.totalWoundLoss > 0 && args.opposedTest.attackerTest.result.critical && args.opposedTest.result.hitloc.value == \"head\") {\n let brainRot = await fromUuid(\"Compendium.wfrp4e-lustria.items.Item.IsNQH867Y58pZgq6\");\n args.test.targets[0].createEmbeddedDocuments(\"Item\", [brainRot], {fromEffect : this.effect.id});\n this.script.scriptMessage(`${args.test.targets[0].name} has been infected by Brain Rot`);\n}","Yf2MmOzazzMdmoPU":"let armour = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\nlet armourData = armour.toObject()\narmourData.system.specification.value = 1\n \nlet fury = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet furyData = fury.toObject();\n\nlet horns = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet hornsData = horns.toObject()\nhornsData.system.specification.value = 6\n\nthis.actor.createEmbeddedDocuments(\"Item\", [armourData, furyData, hornsData], {fromEffect : this.effect.id})","YfRPSgJjvHvl50HW":"return args.skill?.name != \"Runesmithing\"","YjAIsFlxKTJvYs60":"this.item.system.reduceQuantity();","YjJcRdytVRm88qLn":"args.context.additionalDamage = 1","YrXhk2YJaWSChMhp":"// Brawling management\nlet base = this.actor.characteristics.ws.value;\nlet melee = this.actor.has(\"Corps à corps (Bagarre)\", \"skill\");\nif (!melee) {\n melee = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jLyoyqwmBVPjRjhM\");\n melee = melee.toObject();\n melee.system.modifier.value = 55 - base;\n await this.actor.createEmbeddedDocuments(\"Item\", [melee], {fromEffect : this.effect.id});\n} else {\n //this.actor.updateEmbeddedDocuments(\"Item\", { _id: melee.id, 'system.modifier.value': 55-base});\n await this.effect.update({\"flags.wfrp4e.fistsOfGork\" : 55 - base})\n}\n\n// Weapon management\nbase = this.actor.characteristics.s.bonus;\nweapon = await fromUuid(\"Compendium.wfrp4e-core.items.Item.AtpAudHA4ybXVlWM\");\nweapon = weapon.toObject();\nweapon.name = \"Fists of Gork\";\nweapon.img = this.effect.img;\nweapon.system.rollable.skill = \"Corps à corps (Bagarre)\";\nweapon.system.specification.value = 9 - base;\nawait this.actor.createEmbeddedDocuments(\"Item\", [weapon], {fromEffect : this.effect.id});\n\n//this.script.scriptMessage(`${this.actor.name} now has Melee (Brawling) 55 and Weapon (Fists) +9`);","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","YsUdMhQ2AArcJIqy":"let choice1 = [\n {\n type: \"trait\",\n name: \"Corruption (Mineure)\",\n diff : {\n system : {\n specification : {\n value : \"Minor\"\n }\n }\n }\n },\n {\n type: \"trait\",\n name: \"Infecté\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n foundry.utils.mergeObject(item, c.diff);\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\nlet fel_gain = 0\nif (args.actor.characteristics.fel.value <= 0)\n{\n fel_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\n\nif (fel_gain)\n msg += ` and ${fel_gain} Fellowship`\n\n\nlet newInt = i_gain + args.actor.characteristics.int.modifier\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\n\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\n\nthis.script.message(msg)","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\n\nif (newEffect)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\n}","YySjPfSAPdMAfjsh":"let talents = [\"Charge Berserk\", \"Vigilance\", \"Combat Instinctif\", \"Assaut féroce\", \"Endurci\", \"Résistance à la Magie\", \"Resistance (Magic)\", \"Déterminé\", \"Coup puissant\", \"Guerrier né\"];\nlet currentCareer = this.actor.system.currentCareer;\n\nif (!currentCareer) return;\n\nfor (let talent of talents) {\n if (currentCareer.system.talents.includes(talent))\n continue;\n currentCareer.system.talents.push(talent);\t\n}\n\n","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nitem = item.toObject()\nitem.name = this.effect.name\nitem.system.specification.value = this.actor.characteristics.s.bonus\nitem.system.description.value = \"\"\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value -= 2;\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\nif (ablaze)\n{\n this.script.notification(\"Immunisé au feu\");\n ablaze.delete()\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true);\n\nlet choice = await ItemDialog.create(spells, 1);\n\nif (choice[0])\n{\n this.script.message(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\n foundry.utils.setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\n spell.system.wind.value = \"Focalisation (Dhar)\";\n spell.system.memorized.value = true;\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\n}","ZCBcwbVFHFTFRntb":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ZCkYe5XMVY1RWMXG":"args.context.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effet because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Divisé les dégats par deux? (Divise les dégats de tout feu par deux)\"})\n}\nelse\n{\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par deux\", value : \"× 0.5\"})\n}","ZEXhYJqqxF6QAixX":"return args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\n\nswitch (initiativeSetting) {\n case \"default\":\n args.initiative += \"+10\"\n break;\n\n case \"sl\":\n args.initiative += \"+1\"\n break;\n\n case \"d10Init\":\n args.initiative += \"+10\"\n break;\n\n case \"d10InitAgi\":\n args.initiative += \"+1\"\n break;\n}","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet biteData = bite.toObject();\nlet infectedData = infected.toObject();\n\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\n\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\ndata.system.specification.value = \"Religion\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","ZMwJad6v4G13SgjR":"return args.type == \"cast\" || args.type == \"channelling\"","ZNu4B0OdjkM9lmtu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Vision)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZOgtDW3mkTfeyc5M":"args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1;","ZRoG7GiMDQWso6gN":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'difficult';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\n{\n // Wait till after chat card is posted\n warhammer.utility.sleep(500).then(() => {\n game.wfrp4e.utility.postTerror(1, this.effect.name)\n game.wfrp4e.utility.postTerror(2, this.effect.name)\n })\n}","ZURBQYTYcP5jci5k":"const broken = this.actor.hasCondition(\"broken\");\n\nbroken?.delete();","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Peur 2 \n// in Wolves, Lions, Goats, and Chimeras.\ngame.wfrp4e.utility.postPeur(2, this.effect.name)\n","ZbuW8y7t9Y8oUFWq":"return !((args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\"))","ZdHvGvSJBsIuPphF":"return !args.data.dualWieldingOption && !args.context.dualWieldOffhand","ZfgPAtNKA5KrETer":"return args.type == \"cast\";","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","Znz4g56UH23SSCg7":"if (!args.messageSent)\n{\n args.messageSent = true;\n let advantage = this.item.effects.filter(i => i.name == this.effect.name).length;\n this.actor.setAdvantage(advantage)\n this.script.message(`Allies within 6 yards gain ${advantage} Advantage`)\n}","ZqTW093qENOwGONP":"let msg = \"\"\n\nlet SL = parseInt(this.effect.sourceTest.result.SL);\n\nfor(let i = 0; i < SL; i++)\n{\n msg += `

${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}

`\n}\n\nthis.script.message(msg);","ZrePyV2spv3v65Tg":"return args.type != \"weapon\" && !this.actor.statuses.has(\"infighting\")","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\nlet holed = this.actor.flags.holed || {holed: 0};\nholed.holed += rating;\nthis.actor.flags.holed = holed;\n","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = 0\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"Loading Careers\", true);\ncareers.forEach(c => {\n if (!c.id)\n {\n c.id = c._id;\n }\n});\nlet choice = await ItemDialog.create(careers, 1, {text : \"Choisissez une Carrière de Double Vie\", title : this.effect.name, indexed : true});\nif (choice[0])\n{\n let career = choice[0];\n let data = career.toObject();\n foundry.utils.setProperty(data, \"flags.wfrp4e.doubleLife\", true);\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n this.effect.updateSource({name : this.effect.setSpecifier(data.name)})\n}\n","a7pEvCycVnFBXGAQ":"let test = await this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"easy\"}})\nawait Test.roll();\n\nif (!Test.succeeded)\n{\n\tthis.actor.addCondition(\"stunned\");\n}","a81IMxqmMtHgYnIF":"return !args.weapon?.system.isMelee;","a8RabrnJ08O07rDX":"if (args.totalWoundLoss > 0)\n{\n // I'm assuming the endurance test specified is for the end-round check\n await args.actor.addCondition(\"poisoned\", 2);\n}","a8i0sA1RBnD8nHZt":"let caster = this.effect.sourceActor\nlet targetedItem = this.effect.system.itemTargets[0];\n\nlet qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities);\nlet flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws);\n\nif (targetedItem.type == \"weapon\")\n{\n foundry.utils.mergeObject(qualities, game.wfrp4e.config.weaponQualities)\n foundry.utils.mergeObject(flaws, game.wfrp4e.config.weaponFlaws)\n}\nelse if (targetedItem.type == \"armour\")\n{\n foundry.utils.mergeObject(qualities, game.wfrp4e.config.armorQualities)\n foundry.utils.mergeObject(flaws, game.wfrp4e.config.armorFlaws)\n}\n\nfor(let q in qualities)\n{\n // If the weapon already has a flaw, don't put it in the dialog\n if (targetedItem.system.properties.qualities[q])\n {\n delete qualities[q]\n }\n}\nfor(let f in flaws)\n{\n // If a weapon doesn't have a flaw, don't put it in the dialog\n if (!targetedItem.system.properties.flaws[f])\n {\n delete flaws[f]\n }\n}\n\nlet added = await ItemDialog.create(ItemDialog.objectToArray(qualities), \"unlimited\", \"Choisir les Qualités à ajouter\");\nlet removed = []\nif (!foundry.utils.isEmpty(flaws))\n{\n removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), \"unlimited\", \"Choisir les Défauts à retirer\");\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.propertiesChanged\" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}})\n","aCVtaW8ag1WibcAr":"args.attacker.modifyWounds(1)\nthis.script.message(`${args.attacker.prototypeToken.name} recovers 1 Wound.`)","aFwNs7TMVF90i9JF":"let tireless = this.item.Advances + 1\nlet fatigued = this.actor.hasCondition(\"fatigued\").conditionValue\nif (args.flags?.tireless == undefined) {\n args.fields.modifier += 10 * (Math.min(tireless, fatigued));\n args.flags.tireless = true\n}","aIYUsBIDKWJ3CEtj":"this.script.message(await this.actor.applyBasicDamage(20, {suppressMsg: true}));","aMHGjWyn6BXCI4pw":"let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.hXcfygzujgyMN1uI\");\nthis.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect: this.effect.id})","aPZiVhgwR0Xql6AM":"let effectsToEnable = this.actor.items.filter(i => i.type == \"disease\").reduce((effects, item) => effects.concat(item.effects.contents), []).concat(this.actor.effects.contents.filter(i => i.isCondition)).filter(i => i.disabled);\n\nif (effectsToEnable.length)\n{\n this.script.notification(`Re-enabling ${effectsToEnable.map(i => i.name).join(\", \")}.`);\n effectsToEnable.forEach(i => i.update({disabled : false}))\n}","aRvJUcgYqhRmmWYC":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.e3McIND4Rrsn5cE6\", this.effect, {\"system.advances.value\" : 1}, {skipExperienceChecks : true})","abLWYtNTu1UVDQAs":"if (args.opposedTest.result.hitloc.value == this.effect.flags.wfrp4e.location) // e.g. 'head', rLeg, 'lArm'\n{\n this.message(`Gains a @Condition[Blinded] condition as their ${this.item.name} was hit`);\n this.actor.addCondition(\"blinded\");\n}","abVIvJBzuskNzCQv":"let amount = this.effect.sourceTest.result.overcast.usage.other.current;\n\nlet sss = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet strider = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\n\nlet items = Array(amount).fill(sss).concat(Array(amount).fill(strider))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","aeBetniKqq5SD9Ou":"let characteristics = {\n \"ws\" : 30,\n \"bs\" : 20,\n \"s\" : 20,\n \"t\" : 25,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 30,\n \"wp\" : 40,\n \"fel\" : 30\n}\nlet skills = [\"Intimidation\", \"Langue (Classique)\", \"Commandement\", \"Savoir (Guerre)\", \"Savoir (Histoire)\", \"Perception\"]\nlet skillAdvancements = [20, 30, 20, 30, 20, 20]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Coude-à-coude\", \"Menaçant\", \"Robuste\", \"Coup puissant\", \"Coup puissant\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Plastron d'acier\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","aedzdFyjI80Ah3qC":"return !this.item.equipped.value \n || !args?.weapon\n || !([\"giant\"].includes(args.target.Species.toLowerCase()))","agsm3NI1NDtHRG4y":"this.actor.getActiveTokens().forEach(t => t.document.update({texture : this.actor.prototypeToken.texture}, {animate : false}));","ahbA7o5G9dzMFl76":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","alJgj25l3239h2SW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hTgrGkWnmIR4xhVe\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","araS9qYWOAVrV8F7":"args.actor.system.details.man -= 3;\nargs.actor.system.details.move.value -= 2;","ayIbw2Vw2t9xg33P":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","b1zMefdoZYtzCm7i":"return [\"roll\", \"none\"].includes(args.fields.hitLocation) || args.item?.attackType != \"ranged\"","b2Kb4IuD22RhKhR0":"let actor = Array.from(game.user.targets)[0]?.actor;\n\nif (actor)\n{\n actor.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[0].uuid})\n}\nelse\n{\n this.script.notification(\"Aucune cible!\", \"error\")\n}","b2WaqRna5CFXmbDG":"args.context.stag = true;","b4CIeJF2L4E1qikC":"return !args.skill","b5DfAWtpV1x2R8If":"this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","b787rIfyHF5LnALd":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.HbrwGhUl0ZXz4kLA\")\nlet hardy = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.VUJUZVN3VYhOaPjj\")\nlet armour = item.toObject();\narmour.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [armour, hardy], {fromEffect : this.effect.id});","b8G4cjfn3RG2tEYX":"this.actor.addCondition(\"ablaze\", 3);","b8XFmEUu1d2YNQ7F":"const {targetUuid, characteristicsToSwap} = this.effect.flags.wfrp4e;\n\nif (!characteristicsToSwap) return;\n\nconst target = fromUuidSync(targetUuid);\n\nif (!target) return;\n\nfor (const char of characteristicsToSwap) {\n args.actor.system.characteristics[char].advances = target.system.characteristics[char].advances;\n args.actor.system.characteristics[char].bonus = target.system.characteristics[char].bonus;\n args.actor.system.characteristics[char].bonusMod = target.system.characteristics[char].bonusMod;\n args.actor.system.characteristics[char].calculationBonusModifier = target.system.characteristics[char].calculationBonusModifier;\n args.actor.system.characteristics[char].initial = target.system.characteristics[char].initial;\n args.actor.system.characteristics[char].modifier = target.system.characteristics[char].modifier;\n args.actor.system.characteristics[char].value = target.system.characteristics[char].value;\n}","bBdXzBmxgFFBwMMS":"if(args.opposedTest.attackerTest.item?.isProjectiles && args.applyAP && !args.sureShot)\n{\n if (args.modifiers.ap.value)\n {\n args.sureShot = true;\n args.modifiers.ap.details.push(`${this.effect.name} (Ignore ${this.item.Advances})`)\n args.modifiers.ap.ignored += this.item.Advances;\n }\n}","bDS62ctjfnTU4xIu":"return args.skill.name !== game.i18n.localize(\"NAME.Leadership\")","bEVlJOOA1kLlzpWx":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Commandement\" , \"Savoir (Magie)\" , \"Savoir (Théologie)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\nlet talents = [\"Harmonisation Aethyrique\", \"Magie des Arcanes\", \"Diction Instinctive\", \"Diction Instinctive\", \"Chance\", \"Sens de la Magie\", \"Menaçant\", \"Magie Mineure\", \"Seconde Vue\", \"Sixième Sens\"]\nlet trappings = [\"Arme simple\", \"(2M) Bâton de combat\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","bL98Sr1TRLMPEdlk":"if (args.test.failed)\n{\n\tthis.actor.addCondition(\"fatigued\");\n}","bLkt8VpTTPoTxW0W":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}\n","bMEFHPCei2evnZZw":"// Victims that take at least 1 Wound from a Fell Dagger\n// immediately take a Poisoned Condition \n// resisted with a Difficult (-10) Résistance Test. \n\n// TODO: Add Venin strength to message\n\nif (args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"poisoned\")\n this.script.message(`\n ${this.effect.name}:
\n ${args.actor.name} has been given a @Condition[Poisoned] Condition, which can be resisted with a Difficult (-10) Résistance Test.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","bNhpJPWwoHLq68zD":"let actor = await DragDialog.create({title : this.effect.name, text : \"Fournissez un Acteur tatoueur (fermer pour ignorer les Tests)\"})\n\nif (!actor)\n{\n this.script.notification(\"Tests ignorés pour appliquer les tatouages\");\n if (await foundry.applications.api.Dialog.confirm({\n window: {title: this.effect.name},\n content : \"

Apply Ward of Grimnir effet?

\"\n }))\n {\n return;\n }\n else \n {\n return false;\n }\n}\n\n\nlet failed = false;\nif (this.actor.itemTags.skill.find(i => i.name == \"Savoir (Théologie)\"))\n{\n let test = await this.actor.setupSkill(\"Savoir (Théologie)\", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"vhard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n}\nelse \n{\n this.script.notification(\"Compétence Savoir (Théologie) introuvable, impossible de continuer.\")\n failed = true;\n}\n\nif (this.actor.itemTags.skill.find(i => i.name == \"Lore (Runes)\"))\n {\n let test = await this.actor.setupSkill(\"Lore (Runes)\", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n }\n else \n {\n this.script.notification(\"Compétence Savoir (Runes) introuvable, impossible de continuer.\")\n failed = true;\n }\n\n\n let test = await this.actor.setupSkill(\"Art (Tattooing)\", {appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n\n if (failed)\n {\n this.script.message(\"Un ou plusieurs Tests pour appliquer les tatouages ont échoué.\")\n return false;\n }\n else\n {\n return true;\n }","bQyVajMN1ETwlzvM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\nlet target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n data.system.specification.value = target.result\n this.script.notification(target.result);\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bRiFHPC1StKxqNIC":"if (isNaN(parseInt(this.item.system.specification.value))) {\n let value = await ValueDialog.create({title : \"Valeur de Robustesse\", text : \"Entrez la valeur de Robustesse\"});\n if (value) {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","bRtZH0xRh8dgqMeW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bT4gLrE3W36DIP4k":"if (args.applyAP && args.modifiers.ap.metal && args.alreadyPenetrating)\n {\n args.modifiers.ap.ignored += 1\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore +1 PA d'armure en métal\");\n args.modifiers.ap.metal--;\n }","bWr8leucbWslBCYG":"return args.characteristic != \"s\"","bgLeMqihLya2iobP":"const river = this.actor.itemTags.template.find(t => t.name === \"River Troll\");\n\nif (!river) {\n args.options.abortItemCreation = true;\n this.script.notification(\"Peut seulement être appliqué à un Troll des Rivières.\", 'warning');\n}","bidoOQSAofp4NPf6":"return args?.skill?.name !== game.i18n.localize(\"NAME.Cool\")","bkbWgG9COvZWZbAX":"args.context.addChargingDice = true;","brNRqfpPqD2Ki0cM":"args.prefillModifiers.modifier -= 10","btPrQkGRKUkhNe3N":"return args.skill?.name == \"Métier (Apothicaire)\"","bwtQOSWn120NICkf":"let test = await this.actor.setupCharacteristic(\"ag\", {fields : {difficulty : \"hard\"}});\nawait Test.roll();\n\nif (Test.Échoué)\n{\n await this.actor.addCondition(\"bleeding\")\n await this.actor.addCondition(\"entangled\")\n}","bzaoWcieMFaU5B5l":"return !this.actor.flags.useless[this.item.system.location.key] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","c31hjp7k0hlpdGBC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","c7HTWfg3CbjN9e1M":"this.actor.name = this.actor.name.replace(\"Common Troll\", \"Troll\");","c9xxdOCaQSwooK8n":"if (!this.actor.has(\"Bénédiction de Bataille\",\"prayer\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.ElmLfnrXliStS9CP\", this.effect)","cAioHYtlxuOCwRLh":"let ablaze = Number(args.opposedTest.attackerTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","cApfxL7Ic0NKdoSr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cBSy9CR5NZvcLRg8":"\n args.prefillModifiers.modifier += 0;\n args.prefillModifiers.slBonus += 0;\n args.prefillModifiers.successBonus += 0;\n ","cC7jjJDSVPi5BJUq":"if (this.item.equipped.value) {\n this.actor.system.status.addArmour(1, {source: this.effect})\n}","cDBhmHn5kjgWBAlT":"let num = (this.effect.sourceTest.result.overcast.usage.other.current || 1)\n\nthis.actor.addCondition(\"entangled\", num)","cEg09bnvZD6Ysnpc":"let item = await fromUuid(\"Compendium.wfrp4e-archives2.items.anIlqJXFOIEzIOo1\")\nlet data = item.toObject();\ndata.name = this.item.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cJFDnq1HI4gXWcJo":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text: \"Entrez la valeur de Protection\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\n{\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\n\tif (args.wardRoll >= args.ward && args.ward > 3)\n {\n let newWard = Math.max(3, args.ward - 1)\n this.script.message(\"Protection améliorée à \" + newWard)\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\n }\n\n}","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\n\nthis.actor.system.characteristics.s.modifier += sl * 10;\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\nlet data = item.toObject();\n\nif (this.item.name.includes(\"(\"))\n{\n\tgroup = this.item.parenthesesText\n}\n\nelse\n{\n\tgroup = await ValueDialog.create({text : \"Entrez le Groupe de Haine\", title : \"Groupe de Haine\"})\n\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.Tests.value.replace(\"Group\", group)})\n\tthis.effet.updateSource({name : this.effet.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(\"Cible\", group);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cW8ZuQ9YIUG5uvhf":"return args.characteristic != \"t\";","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\n{\n args.item.cn.value -=2\n if (args.item.cn.value < 0)\n args.item.cn.value = 0\n}","cZVrzR4fxV86lxNW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yrkI7ATjqLPDTFmZ\")\nlet res = item.toObject();\nres.system.specification.value = 1;\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\")\nlet ss = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [res, ss], {fromEffect : this.effect.id})","cgmA2N0MkjA7qIZy":"return args.type != \"cast\" || args.item?.system.lore?.value != \"shadow\"","ch5SD2XOQfcYo0X5":"if (args.sizeDiff <= -2 && args.opposedTest.attackerTest.result.critical)\n args.damageMultiplier = Math.abs(args.sizeDiff)\n\n let sBonusDiff = args.opposedTest.defenderTest.actor.characteristics.t.bonus - args.opposedTest.attackerTest.actor.characteristics.s.bonus\n let weapon = args.opposedTest.attackerTest.item\n if (sBonusDiff > 0 && weapon && weapon.damage.value.includes(\"SB\"))\n {\n args.damage += sBonusDiff\n args.breakdown.other.push({label : this.effect.name, value : sBonusDiff});\n }","chUpiI3el8IO8MSs":"if (args.opposedTest.attackerTest.item?.name.includes(\"Morsure\"))\n{\n let woundsGained = args.totalWoundLoss;\n this.script.message(`Gains ${woundsGained} Wounds`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n this.actor.modifyWounds(woundsGained)\n}","cipTp0OS2bfKLjZS":"if (args.totalWoundLoss > 0) {\n await args.actor.addCondition(\"bleeding\")\n await args.actor.addCondition(\"poisoned\")\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","clO7l82UYMJ4XVks":"args.context.giantbane = true","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cxgGYbuiXM3NxIOI":"if (args.test.options.flags.skewering)\n{\n args.test.preData.roll = 1;\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","czZI8S09By0Mqlsr":"return (args.skill?.name == undefined || args.item?.skillToUse?.name != args.skill?.name)","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\nthis.actor.characteristics.i.bonus = 1;\n\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\n{\n skill.system.total.value= Math.min(skill.system.total.value, 10)\n}","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dEx8xfG7VLbN69Ha":"if (!this.item.system.properties.flaws.reload) return;\n\nconst minReload = this.item.system.properties.qualities?.salvo ? 1 : 0;\nconst originalReload = this.item.system.properties.flaws.reload.value;\nconst runesOfReloading = Number(this.item.effects.contents.filter(e => e.name == this.effect.name).length);\nconst newReload = Math.max(originalReload - (2 * runesOfReloading), minReload);\n\nif (newReload) {\n this.item.system.properties.flaws.reload.value = newReload;\n this.item.system.properties.flaws.reload.display = `${game.i18n.localize(\"PROPERTY.Reload\")} ${newReload}`;\n}\nelse {\n delete this.item.system.properties.flaws.reload\n}","dIxYt421K010eogY":"\n let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n args.abort = \"Missed - Headless\"\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Ribs\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","dMeSZGdvw7zlnUKh":"return args.characteristic != \"wp\" && !args.context.terror && !args.extendedTest?.flags.wfrp4e?.fear","dULCkRxtisuzQyuK":"if (args.options.condition) \n this.effect.delete();","dVF5ywnzeiZQx9ke":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) \n{\n\tthis.script.scriptMessage(await this.actor.applyBasicDamage(15, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n}","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\n let days = new Roll(injury.system.duration.value).evaluateSync().total\n let num = 1 + Number(this.effect.sourceTest.result.SL);\n let roll = await new Roll(num+'d10').roll()\n await roll.toMessage(this.script.getChatData())\n let newDays = Math.max(days - roll.total, 1)\n this.actor.updateEmbeddedDocuments(\"Item\", [{_id: injury.id, 'system.duration.value': newDays} ])\n let message = \"Blessure réduite à \"+newDays+\" (-\" + roll.total + \") au lieu de \"+days\n this.script.message(message)\n}\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` + parseInt(this.effet.sourceTest.result.SL)`\n}","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\nconsole.log(this.actor);\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\n\nsense.name += \" (Sight)\";\nsense.system.tests.value = sense.system.tests.value.replace(\"Sense\", \"Sight\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\n}","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\n\nthis.actor.update({\"system.status.fate.value\" : current + 1})\n\nthis.script.message(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`)","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.ag.value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","dr9VJKGY3TeGuzXj":"this.script.message(`Allies of ${this.actor.name} gain +20 Initiative for the first round.`)","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\n args.fields.slBonus += 2;\nelse\n args.fields.slBonus -= 2;","dxt3p07po06J9fO1":"const metal = () => {\n for (const [key, loc] of Object.entries(this.actor.armour)) {\n if (!loc.layers) continue;\n\n for (const layer of loc.layers) {\n if (layer.metal)\n return true;\n }\n }\n\n return false;\n};\n\nargs.fields.slBonus -= metal() ? 2 : 1;","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\n\nawait args.actor.addCondition(\"ablaze\", 2);\nawait args.actor.addCondition(\"prone\");","e0eKVlOSk3Vw1HiD":"return args.characteristic != \"wp\" || args.type != \"characteristic\"","e2JlsKoW8oaFjn6Y":"const roll = new Roll(\"1d10\");\n\nawait roll.evaluate();\nroll.toMessage();\n\nconst slBonus = Number(this.effect.sourceTest.result.SL) + roll.total;\n\nthis.effect.setFlag(\"wfrp4e\", \"slBonus\", slBonus);","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`)\n}","e3dBud1keWyhw6nw":"const stupid = this.actor.items.find(i => i.name === \"Stupidee\");\n\nif (!stupid) return;\n\n\nif (this.item.system.disabled) {\n await stupid.update({\"system.disabled\": false});\n} else {\n await stupid.update({\"system.disabled\": true});\n}","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n this.script.message(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`)\n}","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","eC61buStv62b3sN9":"args.fields.slBonus += 8;","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eIiiDhJohYez26qY":"const {targetUuid} = this.effect.flags.wfrp4e;\n\nif (args.actor.uuid !== targetUuid) return;\n\nconst recordedWounds = this.effect.getFlag(\"wfrp4e\", \"damageToReturn\");\n\nif (!recordedWounds) return;\n\nargs.modifiers.other.push({label: this.effect.name, value: recordedWounds});\nargs.totalWoundLoss += recordedWounds\n\nthis.effect.unsetFlag(\"wfrp4e\", \"damageToReturn\");","eLxdRg8LX3AdYSEq":"let sumArmour = 0;\nfor (let key in this.actor.system.status.armour) {\n let armour = this.actor.system.status.armour[key];\n sumArmour += Number(armour?.value || 0);\n}\nlet damage = Math.floor(Number(sumArmour)/2);\nif (damage > 0 ) { \n\tthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n}","ePPgxQOqL1Uhz2k9":"let addOption = await foundry.applications.api.DialogV2.confirm({\n window : {title : \"Option\"},\n content :\n `\n Ajouter une option?\n

\n Projectile (Arc) +10 et un Arc long avec 12 flèches\n

\n `,\n})\n\nlet choice = []\n\nif (addOption)\n{\n choice = [\n {\n type : \"skill\",\n name : \"Projectile (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Arc long\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche\",\n }\n ];\n}\n\n\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","ePv2YYcr4lz3AkGu":"args.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier = 0","eRVVn8YtU8nnOW2q":"await this.actor.addCondition(\"prone\");\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty: \"difficult\"},\n context: {\n failure: `Encaisse 8 dégâts.`,\n success: `Encaisse 4 dégâts.`\n }\n})\n\nawait test.roll();\nconst damage = test.failed ? 8 : 4;\n\nawait this.actor.applyBasicDamage(damage, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, loc: \"roll\"});","eTHJSRutCEpuyPkR":"return args.weapon?.system?.attackType !== \"melee\" || game.settings.get(\"wfrp4e\", \"useGroupAdvantage\")","eViKAYOtuaOqo6c7":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.ConsumeAlcohol\"))","eWWLmA2xINR321aK":"args.item.system.qualities.value.push({name : \"magical\"})","eWvHTkxsjKuH2IKm":"const luck = Number(this.item.qualities.value.filter(v => v.key == \"luck\")[0].description)\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.u0CFf3xwiyidD9T5\")\n\nfor (let i = 0; i < luck; i++) {\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (this.item.system.location.key == \"rArm\")\n{\n\tdata.system.location.value = \"Right Hand\"\n\tdata.system.location.key = \"rHand\"\n}\nelse if (this.item.system.location.key == \"lArm\")\n{\n\tdata.system.location.value = \"Left Hand\"\n\tdata.system.location.key = \"lHand\"\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Yield or die!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.script.notification(\"Ajout de \" + data.name);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\ngame.wfrp4e.utility.postPeur(2, this.actor.prototypeToken.name)","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\nif (trait && trait.name.includes(\"Morsure\") && woundLossEffect)\n{\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\n}","egc02UIueJgEQMqx":"args.context.kingship = true","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\nlet data = item.toObject();\ndata.name += \" (Ennemi)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eieFcF4BxIvDTN3C":"args.abort = `Cannot perform Projectiles Attacks within ${this.effect.name}`;","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\nuses++;\nthis.script.notification(`Utilisé ${uses} fois`)\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effet.update({\"system.transferData.type\" : \"other\"})\n\tthis.script.notification(`Utilisé`);\n}\n","eq32dKXeTAbKhhLf":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\", Math.max(1, parseInt(args.opposedTest.attackerTest.result.SL) + 1))\n}","eqxE7nBO13yJS7hc":"let roll = (await new Roll(\"1d10\").roll())\nroll.toMessage({flavor: \"Blessures soignées\", speaker : {alias : this.actor.name}})\n\nthis.actor.modifyWounds(roll.total)\n\nthis.actor.hasCondition(\"bleeding\")?.delete();","esuLwq4g5T8k1kLT":"await args.actor.addCondition(\"ablaze\"); await args.actor.addCondition(\"prone\");","eu4mHsdZukvUEAGJ":"let token = this.actor.getActiveTokens()[0]?.document;\nif (!token) {\n token = this.actor.prototypeToken\n}\nif (args.equipped) {\n this.effect.setFlag(\"wfrp4e\", \"lightData\", token.light);\n token.update({\n light: {\n \"alpha\": 0.8,\n \"angle\": 360,\n \"bright\": 5,\n \"color\": \"#a33c0f\",\n \"coloration\": 1,\n \"dim\": 20,\n \"attenuation\": 0.5,\n \"luminosity\": 0.5,\n \"saturation\": 0,\n \"contrast\": 0,\n \"shadows\": 0,\n \"animation\": {\n \"type\": \"torch\",\n \"speed\": 8,\n \"intensity\": 4,\n \"reverse\": false\n }\n }\n })\n}\nelse {\n token.update({light: this.effect.getFlag(\"wfrp4e\", \"lightData\")});\n}","eyrUJQAuHvdllCwi":"args.context.flags.skewering = true;\nthis.effect.update({disabled: true});","ezGqDoC9hNRBnFTB":"let choices = await Promise.all([warhammer.utility.findItemId(\"1zaqojk0Oq1m8vYv\"), warhammer.utility.findItemId(\"zIuarD5mB0EF0ji0\")])\nlet items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une arme\")\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => i.system.equipped.value = true);\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","f29Pv6TQtgILxt1h":"if (args.test.options.healWounds) {\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\n let wounds = this.actor.characteristics.int.bonus + ~~args.test.result.SL\n if (args.test.options.fieldDressing && args.test.result.reversed)\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`${this.actor.name} guéri ${wounds} Blessures du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n}","f4vvAGQ8OGoEbrgy":"let SL = args.opposedTest.attackerTest.result.SL - args.opposedTest.attackerTest.item.cn.value\nlet difficulty = \"challenging\"\nif (SL >= 1)\n difficulty = \"difficult\"\nif (SL >= 2)\n difficulty = \"hard\"\nif (SL >= 3)\n difficulty = \"vhard\"\n\n\nlet test = await args.actor.setupCharacteristic(\"wp\", {fields: {difficulty}, skipTargets: true, appendTitle : \" - \" + this.effet.name, context : {failure: \"Reçoit un état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n args.actor.addCondition(\"stunned\");\n}","f6WnrJvoNkfoNN9Y":"return args.item?.attackType != 'melee'","f7WZvYle9iqefRsh":"return args.weapon?.system?.attackType != \"melee\"","f8cnfvGKJH3bYVGN":"return [\"s\", \"t\"].includes(args.characteristic)","fA1dIV1ANo4RVEqy":"if (args.equipped) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4mF5Sp3t09kZhBYc\");\n let champion = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [champion], {fromEffect : this.effect.id})\n} \nelse \n{\n this.effect.deleteCreatedItems();\n}","fC4KcY9S6V30IJyX":"args.context.supercharge = true;","fEFfHFeJxkR0aIJK":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 3 && args.opposedTest.result.winner == \"attacker\")\n{\n this.script.message(`Quiconque dans un rayon de 6 mètres per 1 Blessure and doit effectuer un test Difficile (-10) de Résistance ou recevoir un état @Condition[Deafened]`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","fEyKQqCjDwml3DXO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","fFGuTi0HLjwneMcJ":"return args.item?.system.isProjectiles","fFi9JD4uCY9DPC5B":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.characteristics.t.initial += 10 * specification;\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","fIUxKZMWJ8HMPmH9":"return [\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","fLg90csmdOOKmEE6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 16\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\")\nlet data = item.toObject();\ndata.system.specification.value = 8\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","fNUiKELi9e1vg7KY":"args.actor.removeCondition(\"fatigued\", 99);\nargs.actor.removeCondition(\"bleeding\", 99);","fPKYkBllp7Et62lX":"if (args.test.spell.name == \"Warp Lightning\")\n{\n args.test.preData.reversal = {allowed : true, if: \"better\"};\n}","fSDFCHAo97RLpwGU":"const hitLocation = args.test.hitloc.result\nconst hitLocationArmour = args.test.targets[0].armour[hitLocation]\n\nif (hitLocationArmour.layers.length > 0) {\n hitLocationArmour.layers.forEach(layer => {\n layer.source.system.qualities.value = [];\n layer.impenetrable = false;\n });\n}","fSTjJIqg5tvbwxKt":"const uuid = \"Compendium.wfrp4e-core.items.Item.ahlxlfIl8xUhBkic\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.name = this.effect.name;\ndata.system.equipped.value = true;\n\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\neffectData.disabled = false;\ndata.effects = [effectData];\n\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","fTw3mpSUOlkqVVUC":"this.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","fUD4gMdKe6P3sFdJ":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.Zh68gzYMLW8vZgVo\", this.effect)","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","faRFSsrQylQRZFLk":"return args.bleedingHand || !args.weapon || !this.actor.hasCondition(\"bleeding\")","fcY3pa72dELnOFXV":"return !args.context.reload\n","feMPZhhFeXRtKdKY":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectUuids : this.item.effects.contents[0]?.uuid})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","ffvcCEazZBinHlUX":"args.update({texture : {tint : \"#FFD700\"}});\n","fiF9sM5UpcHMYa33":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += \" (Poison, Disease, Chaos)\"\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect: this.effect.id})","fkFmNcesqqNTMhVn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.2iult41Jehz0F1O8\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","fl762icfKrt9ear2":"this.actor.removeCondition(\"broken\", parseInt(this.effect.sourceTest.result.SL)+1)","fq2fqlWlrVfitkcB":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : -200,\n \"s\" : 20,\n \"t\" : 20,\n \"i\" : 0,\n \"ag\" : -5,\n \"dex\" : -5,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet traits = [ {name:\"Corruption\"}, {name:\"Insensible à la douleur\"}, {name:\"Stupidee\"}, {name:\"Nuée\"}, {name:\"Bestial\", disabled : true}, {name:\"Régénération\", disabled : true}, {name:\"Taille\", value: \"Large\", disabled : true}, {name:\"Territorial\", disabled: true} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n { \n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n if (trait.disabled)\n {\n t.system.disabled = true;\n }\n items.push(t);\n }\n else \n {\n ui.notifications.warn(`: -200\n}\nlet traits = [ {name:`, {permanent : true})\n }\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n","ft0LaRWZT5WtnptP":"let advantage = this.actor.system.status.advantage.value;\nif (advantage > 0)\n{\n await this.actor.setAdvantage(0);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item, {fields : {slBonus : advantage}})\nawait test.roll();","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","fwiBeetIsvpXKtUc":"scatter = await game.wfrp4e.tables.rollTable(\"scatter\");\n\nif (scatter.roll == 9 || scatter.roll == 10)\n{\n this.script.message(`${scatter.roll}: Failed to Scatter`);\n}\nelse \n{\n this.script.message(scatter.result);\n}","fyjYWg7ekj8JJcmq":"if (args.test.result.misfire || args.test.result.fumble)\n{\n args.test.result.other.push(`${this.effect.name}: can be used to Negate Fumble / Raté Effects`)\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\nawait roll.toMessage(this.script.getChatData());\nthis.script.notification(`Healed ${roll.total} Wounds`)\nthis.actor.corruptionDialog(\"moderate\")\nawait this.actor.modifyWounds(roll.total)","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Groupe social)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let group = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\n }\n else\n {\n let value = await ValueDialog.create({text : \"Entrez le Groupe d'Étiquette\", title : this.effet.name});\n if (value)\n {\n name = `${name.split(\"(\")[0].trim()} (${value})`\n tests = this.item.system.tests.value.replace(\"Groupe social\", value);\n }\n }\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \n// of the target point is splashed with mystic poison, \n// suffering 1d10 + SL damage which ignores Armour Points\n\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\n\nawait damage.toMessage(this.script.getChatData())\n\nthis.script.message(await args.actor.applyBasicDamage(\n damage.total,\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\n))\n\n// ... and gains the Poisoned Condition\n\nthis.actor.addCondition(\"poisoned\")","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\n amberTalons.name = \"Serres d'ambre\";\n amberTalons.img = this.effet.img;\n amberTalons.system.damage.value = \"SB + WPB\"\n amberTalons.system.equipped = true;\n amberTalons.system.qualities.value.push({name : \"magical\"})\n amberTalons.effects.push({\n name : \"Serres d'ambre\",\n transfer: false,\n img : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\n system: {\n transferData : {\n documentType : \"Item\"\n },\n scriptData : [{\n trigger : \"applyDamage\",\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\n }]\n }\n })\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","g5y0tdoHCDs7cBy7":"return ![\"NAME.Résistance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name) \n || !this.actor.sameSideAs(this.effect.sourceActor)\n || this.actor.system.details.status.tier !== \"b\"","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\n{\n e.update({disabled: false})\n}\nthis.script.notification(\"Reset Powers\")","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la Force du Venin\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.difficultyNames));\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\n\nif (value === 0)\n args.actor.system.status.mood.value = 0;\nelse if (value !== undefined)\n args.actor.system.status.mood.value += value;","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\n args.Test.preData.reversal = {allowed: true, if: \"better\"};","gQJJaxbN83KSgi36":"if (!args.totalWoundLoss) return\n\nconst roll = await new Roll(\"2d10\").roll();\nroll.toMessage(this.script.getChatData());\n\nargs.attacker.applyBasicDamage(Number(roll.total), { loc: \"roll\" })","gSDhsSB8573joL64":"if (args.equipped) {\n const spell = await game.wfrp4e.utility.findItem(\"Vindictive Glare\", \"spell\");\n const skillUUID = \"Compendium.wfrp4e-core.items.Item.e3McIND4Rrsn5cE6\";\n\n await this.actor.addEffectItems([skillUUID, spell.uuid], this.effect, [{\n \"system.advances.value\": 75 - this.actor.system.characteristics.int.value\n}, {}]);\n} else {\n this.effect.deleteCreatedItems();\n}","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\n","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\n{\n \n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\n args.actor.addCondition(\"ablaze\")","goz8yTlMozlsz3uY":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Strength';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\nif (turns <= 0) return;\nturns--;\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\nconst target = canvas.scene.tokens.get(targetId);\n\nif (turns > 0) {\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\n\n return this.script.message(`

${speaker.alias} continue de s'enrouler autour de ${target.name}. Il pourra commencer à écraser dans ${turns} tours.

`);\n}\n\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effet.name)) {\n this.script.message(`

${speaker.alias} peut reprendre l'écrasement de ${target.name} avec le Test Étendu.

`);\n return;\n}\n\nconst extendedTestData = {\n name: this.effet.name,\n type: \"extendedTest\",\n img: this.effet.img,\n system: {\n SL: {\n current: 0,\n target: target.actor.system.status.Blessures.value\n },\n Test: {\n value: 'Strength'\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: \"challenging\"\n }\n }\n};\n\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effet.id});\nconst extendedTest = extendedTests[0];\n\nthis.script.message(`

${speaker.alias} a fini de s'enrouler autour de ${target.name}. Il peut maintenant commencer à écraser via le Test Étendu @UUID[${extendedTest.uuid}].

`);\n\nlet effet = {\n name: extendedTest.name,\n img: extendedTest.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: extendedTest.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.effects.find(e => e.id === id);\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\n const target = canvas.scene.tokens.get(targetId);\n this.script.message(\\`

${speaker.alias} a écrasé ${target.name}. Le bateau se brise, réduit à un amas d'épaves.

\\`);\n await effet.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n}\n\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","gull3qgCahzk2xYu":"this.actor.addCondition(\"fatigued\", parseInt(this.effect.sourceTest.result.SL))\n\nlet test = await this.actor.setupSkill(\"Calme\", {fields : {difficulty: \"challenging\"}, appendTitle : ` - ${this.effect.name}`});\n\nawait test.roll();\n\nif (test.failed)\n{\n\tthis.actor.addCondition(\"broken\");\n}","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\nargs.fields.slBonus -= specification;","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\nconst item = await fromUuid(uuid);\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","h4lnexDYAhyQuiR5":"if (args.test.isCritical && args.test.weapon.properties?.qualities?.impale) {\n let targets = args.test.targets.filter(t => t.system.details.move.value > 1);\n if (targets.length > 0) {\n targets.forEach(target => {\n target.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n });\n args.test.result.other.push (`${this.effect.name}: Target Move Reduced by 1`)\n }\n}","h766UvswLCsxcMow":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : -15,\n \"t\" : 0,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 5,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charme\", \"Intimidation\", \"Mêlée (Base)\"]\nlet skillAdvancements = [7, 60, 7]\nlet talents = [\"Menaçant\", \"Discret\"]\nlet traits = [\"Perturbant\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","h8JqPMh2mM2uhpxk":"if (args.item.system.tags.has(\"armour\"))\n{\n \nfor(let key in args.item.system.AP)\n{\n if (args.item.system.AP[key])\n {\n args.item.system.AP[key] += 2;\n }\n }\n}","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\nthis.script.message(`Recoit l'état @Condition[Nausea] pour [[1d10]] heures`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\n\nwoundsGained = Math.floor(woundsGained / 2)\n\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\n\nthis.script.message(`Gains ${woundsGained} Wounds`)","hEDuYAgc1O1zG3Rr":"return args.targets[0].actor.appliedEffects.filter(e => e.name == game.i18n.localize(\"Flying\")).length > 0","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","hL3JUSY3xMA4zj2Q":"if (this.sourceActor.uuid === this.actor.uuid) return;\n\nconst test = await this.actor.setupCharacteristic(\"t\", {\n skipTargets: true,\n appendTitle: ` — ${this.effet.name}`,\n fields: {\n difficulty: \"difficult\"\n },\n context: {\n success: \"Est capable de se relever !\",\n failure: \"Est tombé à terre !\",\n }\n});\n\nawait Test.roll();\nif (Test.failure) {\n await this.actor.addCondition(\"prone\");\n}","hO2CFW9hygGSYuJ2":"return args.target?.Species == this.effect.specifier;","hObTbWi4ZdwXimIW":"if (args.item.type == \"spell\")\n{\n args.item.system.cn.value = Math.floor(args.item.system.cn.value / 2);\n}","hOgha3ir8K9TVphO":"return args.characteristic !== \"fel\";","hSImyYjL0CENTvXf":"let test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\", appendTitle : ` - ${this.effect.name}`}});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg = ``\nlet armour = args.actor.itemTags.armour.filter(i => i.system.isMetal && i.system.isEquipped);\nfor(let item of armour)\n{\n\tfor(let key in item.system.AP)\n\t{\n\t\tlet AP = item.system.AP[key]\n\t\tlet damage = Math.floor(AP / 2);\n\t\tawait item.system.damageItem(damage, [key]);\n\t}\n\tmsg += `

${item.name} PA réduit de moitié

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hTsnYKgw0kK10PiC":"args.fields.modifier += 5","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\n{\n\twarhammer.utility.sleep(200).then(() => {\n\t\tthis.script.message(\"Tirage possible sur la table @Table[crithead]{Coups critiques à la tête} au lieu de de la localisation normale.\")\n\n\t})\n}","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hadXFC43VKyrE9jC":"this.actor.addEffectItems([\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\", \"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\"], this.effect);","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","hg89FU1NAp8tIsgO":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"))","hhCs5VBKx50S5IsY":"return !args.context.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = [\"Calme\", \"Esquive\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Réflexes de Combat\"]\nlet trappings = [\"Veste en cuir\", \"Casque en cuir\", \"Jambières en cuir\", \"Bouclier\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hlHKeFWrOA8CsLr9":"args.data.reversal = {allowed : true, if: \"success\"};\nargs.context.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.
`\n if (this.actor.status.wounds.value <= 1)\n {\n msg += `${this.actor.prototypeToken.name} goes unconscious.
`\n await this.actor.addCondition(\"unconscious\")\n }\n this.script.message(msg)\n this.actor.modifyWounds(-1)","hpbraeEbjkXnmD75":"args.fields.hitLocation = \"lLeg\"\nargs.fields.modifier += 20;","hpwJRAhCsXTp9bd9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Armes d'hast)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"skill\",\n name : \"Corps à corps (A deux mains)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Corps à corps (Base)
  2. \n
  3. Corps à corps (Armes d'hast)
  4. \n
  5. Corps à corps (A deux mains)
  6. \n
\n `,\n buttons : [\n {\n label : \"Base\",\n action : \"basic\",\n callback : () => {\n return choice1\n }\n },\n {\n label : \"Armesd'hast\",\n action : \"polearm\",\n callback : () => {\n return choice2\n }\n },\n {\n label : \"A deux mains\",\n action : \"two-handed\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","hqMwzPozAVTzoCxa":"if ((args.test.result.roll % 11 == 0 || args.test.result.roll == 100) && args.test.failed)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"torpedo\"\n }\n}","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)\n args.actor.system.details.move.sail.value -= 1;\n","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Duration)\n if (Number.isNumeric(range))\n {\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\n }\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n let damage = this.effect.sourceTest.result.damage\n\n this.script.message(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","hxmwtw5zAHyS2upG":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Ajouter PA de métal aux Dégâts\" })\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","i93PGV1lDSdi3BJu":"let effectsToDisable = this.actor.items.filter(i => i.type == \"disease\").reduce((effects, item) => effects.concat(item.effects.contents), []).concat(this.actor.effects.contents.filter(i => i.isCondition)).filter(i => i.active);\n\nif (effectsToDisable.length)\n{\n this.script.notification(`Disabling ${effectsToDisable.map(i => i.name).join(\", \")}.`);\n effectsToDisable.forEach(i => i.update({disabled : true}))\n}","iAo3wxMLA64rsKjj":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","iH9o7t8vGDn6pm1d":"if (args.test.result.misfire && args.test.result.roll % 2 == 1 && args.test.result.roll % 11 == 0) {\n delete args.test.result.misfire\n}\nelse if (args.test.result.misfire)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n }\n}","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.s.bonus\ndata.system.description.value = \"\"\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\n}","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\n\nthis.script.message(`this.actor.prototypeToken.name healed ${healed} Wounds`);\n\nthis.actor.modifyWounds(healed)","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\n\n\nlet opposedResult = Test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n let spells = this.actor.itemTypes.spell;\n if (spells.length)\n {\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\n this.script.message(`Perd l'accès à ${chosen.name}`)\n chosen.update({name : chosen.name += \" (PERDU)\"})\n }\n}\n","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\n let staunch = ~~args.test.result.SL + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n args.test.result.other.push(`${this.actor.name} guérit ${staunch} états Hémmoragie du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\n\nif (result.object.documentId && result.object.documentCollection)\n{\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\n if (item)\n { \n let data = item.toObject();\n // Some items need sourceTest for their effects\n foundry.utils.setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\n }\n}\n\nthis.script.message(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.notification(\"Immunisté à la Peur\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}\nreturn args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","ij3BLXzNk7eZ3V95":"return ![\"s\",\"t\",\"wp\",\"fel\"].includes(args.fields.characteristic)","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\n// or the state of being Stinking Drunk are eliminated.\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\n\n// The drinker is thereafter Fatigued\n// for a number of hours equal to 10 minus their Toughness Bonus —\n// nothing but time and rest can eliminate this penalty.\nawait this.actor.addCondition(\"fatigued\")\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\nthis.effect.updateSource({\"duration.rounds\" : duration});\nthis.script.message(`

${this.actor.prototypeToken.name} n'a plus de pénalités liées à l'alcool et gagne l'état Extenué pendant ${duration} heures.

`,\n{\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n})","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Magie des Arcanes (Feu)\"))\n{\n this.actor.addCondition(\"ablaze\");\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\n{\n\targs.flags.amputatedFootOrLeg= true;\n\targs.fields.modifier -= 20;\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\nfor (let i=0; i [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\n\nlet choice = await ItemDialog.create(spells, 1, {text : \"Choisissez un Sort\", title : this.effect.name});\nif (choice[0])\n{\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\n}","iuoVkjFdL1rHdbqR":"return this.item.equipped.value && [\"weapon\", \"cast\"].includes(args.type)","ivxpmCKu3pEMG05c":"if (this.actor.inCombat)\n{\n\tthis.actor.characteristics.s.bonus += 2\t\t\n\tthis.actor.characteristics.s.calculationBonusModifier -= 2\n}","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\n{\n args.item.system.qualities.value.push({name : \"penetrating\"})\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\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]\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \n{\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Minor Exposure to Corruption}`\n )\n this.script.message(\n `${this.effect.name}: \n @Corruption[minor]{Minor Exposure to Corruption}
\n ${args.actor.prototypeToken.name} must take an \n Average (+20%) Corruption (Minor) Test`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","jC8o5PbnqEvOoZ9N":"this.actor.addCondition(\"poisoned\", 2)","jFKnf2UdoxAQx76R":"if (args.equipped)\n{ \n this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.URwIDtInCsxOoGqM\", this.effect);\n}\nelse \n{\n this.effect.deleteCreatedItems();\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\nwoundsGained = Math.ceil(woundsGained / 2)\n\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\n\nargs.actor.addCondition(\"fatigued\")\nargs.attacker.hasCondition(\"fatigued\")?.delete();\n\nthis.script.message(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\n\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\n{\n await broken.delete();\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\n this.script.notification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\n}","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\", true, [\"system.lore.value\"])\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\n\nlet choice = await ItemDialog.create(spells, 1, {text : \"Choisissez un Sort\", title : this.effect.name});\nif (choice[0])\n{\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}\n","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}","jOCLEsjNzERyVLsP":"if(args.test.result.majormis)\n{\n args.test.result.nullmajormis = game.i18n.localize(\"ROLL.MajorMis\")\n args.test.minormis = game.i18n.localize(\"ROLL.MinorMis\")\n}","jOSCsBRUO117spv8":"args.abort = `Only gunpowder or artillery weapons can attack targets within the ${this.effect.name}`;","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\n\targs.abort = `${this.effect.name}: Ignored`","jOm7RxGFm1y6mCpN":"return args.context.crewTest.name.includes(\"Batten Down\");","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.addImpact = true\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Ajouté\")\n }","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\n{\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\n\nthis.script.message(`

${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.

`);","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\nawait this.actor.addCondition(\"deafened\")\nawait this.actor.addCondition(\"fatigued\")","jb1ouw0eIBVy3Wwg":"if (\n this.item == args.attackerTest.item\n && args.attackerTest.succeeded \n && args.defenderTest.item?.system?.attackType == 'melee'\n && (args.defenderTest.item.properties.qualities?.magical || args.defenderTest.item.properties.unusedQualities?.magical)\n) \n{\n args.opposedTest.result.other.push(`${this.effect.name}: destroys magical ${args.defenderTest.item.name}.`)\n}","jbZPLb4wuqJpHLUx":"this.item.system.flaws.value.push({name : \"dangerous\"})","jdS2u1tQPYeO55WI":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif (type == \"cold\")\n{\n\tlet stunned = Math.max(1, Math.trunc(args.totalWoundLoss / 5))\n\tawait args.actor.addCondition(\"stunned\", stunned);\n}\n\nif (type == \"corrosion\")\n{\n let damageItems = await foundry.applications.api.DialogV2.confirm({window: {title : this.item.name}, content : `

Endommage tous les objets portés ?

`})\n\tif (damageItems)\n\t{\n\t\tlet msg = ``\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\n\t\tlet armour = args.actor.itemTags.armour.filter(i => i.isEquipped);\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\n\t\tfor(let item of weapons)\n\t\t{\n\t\t\tif (item.system.properties.qualities.shield)\n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1);\n\t\t\t}\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tfor(let item of armour)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tfor(let item of trappings)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tif (msg)\n\t\t{\n\t\t\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n\t\t}\n\t}\n}\n\nif (type == \"fire\")\n{\n\tawait args.actor.addCondition(\"ablaze\");\n}\n\nif (type == \"electricity\")\n{\n\tawait args.actor.addCondition(\"stunned\");\n}\n\nif (type == \"poison\")\n{\n\tawait args.actor.addCondition(\"poisoned\");\n}\n\nif (type == \"warpfire\")\n{\n\tawait this.actor.corruptionDialog(\"moderate\")\n\tthis.actor.applyEffect({effectUuids : this.item.effects.getName(\"Warpfire\").uuid})\n}","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"poisoned\")","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effet.getFlag(\"wfrp4e\", \"transformed\"))\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}}));\n }\n else\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\n }\n}\nelse\n{\n this.script.notification(\"Aucun chemin d'image de token configuré. Le chemin de l'image doit être défini dans la première ligne de ce script.\", \"error\");\n}","jvNuIbOtB46p0esq":"if (args.test.item?.system?.attackType == \"melee\")\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.Test.result.description = \"Succès marginal\";\n\t\t}\n\t\targs.Test.result.outcome = \"success\"\n args.test.result.other.push(`${this.effect.name}: Minimum +0 SL`)\n\t}\n}","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\n let value = await ValueDialog.create({title : \"Valeur d'Armure\", text : \"Entrez la valeur d'Armure\"});\n if (value) {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","k1Wdehpgdc0hP63E":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet hatred = item.toObject();\nhatred.system.specification.value = \"Skaven\"\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.3wCtgMDNnu8MFmyk\")\nlet immunity = item.toObject();\nimmunity.system.specification.value = \"Poison\"\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.oRx92ByVNEBN6YkK\")\nlet berserk = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [hatred, immunity, berserk], {fromEffect : this.effect.id})","k465TgRelwcSUdS2":"if (this.actor.has(\"Métier (Ingénieur)\", \"skill\"))\n{\n let aim = await this.actor.setupSkill(\"Métier (Ingénieur)\", {appendTitle : ` - Aim ${this.item.name}`});\n await aim.roll();\n let SL = Number(aim.result.SL);\n let context = {}\n if (SL < 0)\n {\n context.fields = {modifier : 10 * SL};\n context.initialTooltip = \"Échoué Métier (Ingénieur)\";\n }\n\n let fire = await this.actor.setupWeapon(this.item, context)\n fire.roll();\n}\nelse\n{\n this.script.notification(\"Cet acteur n'a pas le Métier (Ingénieur)!\", \"error\");\n}","k5792iKWEqKmVZMk":"return args.weapon || args.skill?.name === \"Esquive\";","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\n{\n args.test.result.damage +=1 \n args.test.result.additionalDamage += 1\n}","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","kY50G53IXdNXX9Sc":"for(let e of this.item.effects)\n{\n if (e.name.toLowerCase().includes(\"rune\") && e.system.transferData.type == \"aura\" && e.system.transferData.area.radius == \"6\")\n {\n e.system.transferData.area.radius = \"12\"\n }\n}","kYTEqcs8JpO2OmB9":"if (args.equipped)\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\", this.effect, {\"system.specification.value\": \"10\"});\nelse\n await this.effect.deleteCreatedItems()","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\nconst roll = new Roll(`2d10 - ${sin}`);\nawait roll.evaluate();\nawait roll.toMessage({flavor: `${this.effect.name}`});\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\nteeth = teeth.toObject();\n\nlet roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage(this.script.getChatData({flavor : \"Dents perdues\"}))\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kiolpXGbkmxfPiuI":"let test = this.actor.attacker?.test\nif (test && this.item.system.protects[test.result.hitloc.result] && test.result.critical)\n{\n this.script.message(`${this.item.name}: Blocked Critical Hit`)\n}","knq8lNYLw0v757dQ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.message(\"Immunisé à l'empoisonnement\")\n poisoned.delete()\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\nargs.actor.system.details.man -= 1;\nargs.actor.system.status.carries.max *= 1.5;","kvqJbHBvFr6iGLcI":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.3wCtgMDNnu8MFmyk\",null,[{\"system.specification.value\":\"Poison\"}])","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();","lDIWlQvD6MGyP3QP":"return this.effect.sourceActor.effects.filter(i => i.isCondition).length > 0","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","lG5lfAzNuM4t0rpM":"return args.skill?.name === \"Esquive\";","lII4KMRblqwFBlsV":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 15\n}\nlet skills = [\"Focalisation\", \"Charme\", \"Représentation (Danse)\"]\nlet skillAdvancements = [0, 6, 3]\nlet talents = [\"Attirant\", \"Distraire\", \"Imitation\"]\nlet traits = [\"Perturbant\", \"Flight (6)\", \"Spellcaster (Petty)\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Feux follets\", \"Sommeil\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","lMRsQRgjMexY9dxE":"return [\"NAME.Résistance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","lOIHiAIDtj91kllN":"const chanties = await warhammer.utility.findAllItems('wfrp4e-soc.chanty', \"Loading Chanties\", true);\nlet choice = await ItemDialog.create(chanties, 1, {text : \"Choisissez un Chant\", title : this.effect.name});\nif (choice.length) \n{\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\nthis.script.notification(\"Added \" + item.name)","lQJ68n3y1xDyNicE":"return !args.context.sizeModifier && args.item?.system?.attackType != \"ranged\"","lRZhkh8pcu93QTKz":"if (args.test.spell)\n{\n\targs.test.preData.SL = -10\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n\nlet infectedData = infected.toObject();\nlet fearData = fear.toObject();\nfearData.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\nthis.script.message(msg)\nthis.actor.modifyWounds(-1)","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Résistance', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 't',\n context: {failure: \"Mast shattered!\"}\n});\nawait test.roll();\n\nif (test.failed) {\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\n this.effect.update({disabled: true});\n}","laWHBP2jLrVxcgp9":"this.script.message(await this.actor.applyBasicDamage(2, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","laptAldsT0Fm1rDt":"let blunt = await foundry.applications.api.DialogV2.confirm({window: {title : this.effect.name}, content :`

Appliquer la réduction des dégâts contondants ? (-3)

`})\n\nif (blunt)\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts Contondants\", value : -3})\n}","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\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\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","lmBAZCtofsC8hHHG":"let SL = 1;\n\ndo {\n const signedSL = SL >= 0 ? `+${SL}` : \"SL\";\n const content = `\n
\n

Vous avez augmenté ${signedSL} ${SL > 1 ? \"DRs\" : \"SL\"}. Voulez-vous lancer un d10 ?

\n

1–6: ajoutez +1 DR

\n

7–10: perdez tous les DR accumulés et effectuez le test suivant à –1 DR

\n
\n`;\n const choice = await foundry.applications.api.DialogV2.confirm({\n yes: {label: \"Lancer\", icon: \"fas fa-dice\"},\n no: {label: `Keep ${signedSL} DR`, icon: \"fas fa-check\"},\n content,\n });\n\n if (!choice) break;\n\n const roll = new Roll(\"1d10\");\n await roll.toMessage({flavor: this.effet.name});\n\n if (roll.total >= 7) {\n SL = -1;\n break;\n }\n\n SL++;\n} while (true);\n\nthis.effet.setFlag(\"wfrp4e\", \"SL\", SL);","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","luEuwzYCUrch58Bp":"if (args.opposedTest.attackerTest.options?.grudge) {\n args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 1}) \n}","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effet.name}`, fields: { difficulty: \"challenging\" } })\nawait Test.roll();\n\nif (Test.Échoué)\n{\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\n let currentAge = parseInt(this.actor.system.details.age.value)\n\n let inline = `@ROLL`\n let msg =\n `

${this.actor.prototypeToken.name} ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses

\n

${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Compétence de Combat

\n

${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Compétence de Tir

\n

${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Force

\n

${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Endurance

\n

${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agilité

\n

${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dextérité

\n `\n this.script.message(msg);\n\n let characteristics = foundry.utils.duplicate(this.actor.system.characteristics)\n\n characteristics.ws.initial -= ws\n characteristics.bs.initial -= bs\n characteristics.s.initial -= s\n characteristics.t.initial -= t\n characteristics.ag.initial -= ag\n characteristics.dex.initial -= dex\n\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\n{\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\n if (slash)\n {\n slash.value = \"2A\"\n }\n}","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m4eagTrVOXtotonR":"// Get the size\nlet size = this.actor.sizeNum \nlet diff = \"difficult\";\nif (size < 5) { // 5 = Monstrous\n diff = \"hard\";\n}\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : diff}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n this.actor.addSystemEffect(\"fear\")\n}","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\nargs.prefillModifiers.successBonus++;\n","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\nconst item = await fromUuid(uuid);\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.context.reload","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","mJ9eMPub4epJSf00":"return args.weapon?.system.qualities.value.find(i => i.name == \"shield\") && this.actor.attacker","mPxmCsXYirAIT913":"let key = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.characteristics, this.effect.img), 1, \"Choisir la Caractéristique\");\n\nthis.effect.updateSource({changes : [{key : `system.characteristics.${key[0].id}.modifier`, mode : 2, value : 10}]})","mRvLsSVxNyt8LVZb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z\")\nlet data = item.toObject();\ndata.name += \" (Au choix)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","mT7PDcjF3cJTDbjR":"args.actor.system.details.move.value -= 1;\nargs.actor.system.status.carries.max *= 1.25;","mV4Tmc0yfpL09KV7":"args.actor.addCondition(\"entangled\")","mXvtf3qhJjshpopX":"return [\"weapon\", \"cast\", \"channelling\"].includes(args.type)","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\n{\n args.flags.trained = true;\n args.fields.modifier += 10;\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","mlulnXQo8XU8vKLD":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrer la valeur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","mnvczEiu7gUSWvuV":"if (args.test.options.flags.skewering)\n{\n args.test.result.tables.critical = {\n label : \"Critique (si attaque réussie)\",\n class : \"critical-roll\",\n modifier : args.test.result.critModifier || 0,\n key: `crit${args.test.result.hitloc.result}`\n\n }\n}","n5RJqJL9fdRIxkuN":"if (this.actor.system.status.advantage.value > 0)\n{\n await this.actor.modifyAdvantage(-1);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","n5wowuDE8Dz1uBZn":"let damage = this.effect.sourceActor.characteristics.int.bonus + 6;\nif (this.actor.has(game.i18n.localize(\"NAME.Mort-vivant\")) || this.actor.has(game.i18n.localize(\"NAME.Démoniaque\"))) { \n damage += 6\n}\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}));\n\nlet test = await this.actor.setupCharacteristic(\"int\", {fields : {difficulty : \"average\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n\tthis.actor.addCondition(\"stunned\");\n}","n8X4Vgmrs4M5pyHK":"return !this.actor.isOpposing || this.actor.attacker.test.item.attackType != \"melee\" || !this.item.equipped.value","n99CqhPx3uABCU15":"if (args.test.result.critical && args.test.preData.reversal.allowed)\n{\n args.test.result.other.push(`${this.effect.name}: can reverse Critical Hit roll`)\n}","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\n{\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.message(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nNwAFEURKlFhPcvA":"CorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData());","nSXzktHyNjGUXjaw":"return args.item?.system.isProjectiles","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n args.fields.modifier -= 10;\n}\nelse if ([\"wp\"].includes(args.characteristic))\n{\n args.fields.modifier += 10;\n}","nZtN0zM49xTuG86V":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","naF5EWr1CBkYRZTK":"if (args.opposedTest?.attackerTest?.item?.system?.isProjectiles)\n{\n let choice = await foundry.applications.api.DialogV2.confirm({window: {title : this.item.name}, content : `

Annuler les dégâts avec ${this.effect.name}?

`})\n\n if (choice)\n {\n args.abort = `${this.effect.name}: Dégats annulés.`;\n }\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\n","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\n{\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\n}","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\n{\n this.script.message(`Infected: ${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","nkSmu7v9WiAaK4vq":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'easy';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils gagnent +50 aux tests de natation et peuvent respirer sous l'eau.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\n\n// Kind of insane but whatever\nlet opposedResult = Test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nreturn opposedResult?.winner == \"attacker\";","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o2QhtiLAmUEpDgBX":"return args.skill?.name != \"Voile (Aéronavale)\"","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\n\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\n\nthis.script.message(`Gained ${points} Fortune Points`)","oA197GIqHpU5WR9V":"if (args.test.options.corruption || args.test.options.mutation)\n{ \n args.test.preData.canReverse = true;\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\n{\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let msg = `Rolled ${roll}.`\n if (roll >= 7)\n {\n msg = `Attack hits with an SL of ${roll - 6}.`\n }\n this.script.message(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","oHenUKtaS3jT5xQn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4xF7M6ylIiGntekh\")\nitem = item.toObject()\nitem.name = this.effect.name\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n","oHmtdXWVwm7y7BtO":"args.fields.difficulty = \"hard\";","oPg4se8iQRD14kmB":"let filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nlet items = await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"})\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => i.system.equipped.value = true);\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","oQI06eh8mJ9UqETO":"if (this.item.system.disabled) {\n await this.effect.deleteCreatedItems();\n} else if (!this.actor.items.find(i => i.name === \"Furtif\")) {\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.OzwDT6kzoLYeeR2d\", this.effect);\n}","oTXPA6rbPnYOKNmo":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Langue (Battle)\", \"Commandement\" , \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 15, 30, 20, 20]\n\nlet talents = [\"Vigilance\", \"Maîtrise du combat\", \"Combat Instinctif\", \"Inspiring\", \"Chance\", \"Déterminé\", \"Inébranlable\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n {name: \"Two Handed Weapon\", type: \"trapping\", trappingType: \"clothingAccessories\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, {text: \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"}))\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Ajouter Chaos Steed et +20 Conduite (Cheval) ?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\n\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\n\nthis.script.message(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} gain de @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] pour [[1d10]] heures`)\n }\n}","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\n\nfunction tinDifference(layers)\n{ \n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\n\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\n\n return metalAP - tinAP;\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","ohl803m0tUwNfKAk":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 5 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","okW06V9UiPC4Vcrn":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Calme\", \"Esquive\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Combat Instinctif\", \"Déterminé\"]\nlet trappings = [\"Veste de cuir\", \"Jambières de cuir\", \"Calotte de cuir\", \"Arme simple\", \"Lance\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","okr3TtzpFoefUuJS":"let item = await fromUuid('Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX')\nlet data = item.toObject();\ndata.system.location.value = \"Collar Bone\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","oqgd9G6oI1ncPYLw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CV9btQn09S9Fn8Jk\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\nlet data = item.toObject();\ndata.name += \" (Woodlands)\";\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\n {\n args.actor.addCondition('ablaze')\n }","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\n\nif (criticals.length)\n{\n this.script.notification(\"Impossible de recevoir une Blessure Critique \");\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\n}\n\nif (foundry.utils.getProperty(args.data, \"system.status.wounds.value\") == 0)\n{\n this.script.notification(`Endormi pendant ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} tours`)\n}","pRp6hoBJ0JQa4NNG":"return args.item?.system?.attackType != \"ranged\" || this.actor.system.canFly.effects.filter(e => e.name != \"Flying\")[0].disabled","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\nargs.actor.system.details.move.value -= 1;","pdvCwjxHI56EmxuU":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sJ3yX1kvzu2hgNq5\")\nlet amphibious = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nlet as = item.toObject();\nas.name += \" (Sight)\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [amphibious, as], {fromEffect : this.effect.id})","pj7gjxHrnrZonC6U":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet data = item.toObject();\ndata.name = `${data.name} (Mort-vivant, Warm-bloods)`;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\n\nif (ablaze) {\n ablaze.delete();\n this.script.notification(\"Résistance à l'état En Flammes\");\n}","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","ppc8L3WtIx6JzlAd":"if (args.equipped) {\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.mDgEMOoJpi8DkRYb\", this.effect);\n} else {\n this.effect.deleteCreatedItems()\n}","pqQkeUVpuZ0jOKnZ":"const tables = [\n game.wfrp4e.tables.findTable(\"mutatephys\"),\n game.wfrp4e.tables.findTable(\"mutatephys\", \"Khorne\"),\n];\n\nif (!tables.length) {\n return ui.notifications.error(\"Table de Mutation introuvable, veuillez vous assurer qu'une table avec la clé `mutatephys` est importée dans le monde.\");\n}\n\nconst values = {}\n\nlet i = 0;\nfor (const table of tables) {\n values[i] = table.name;\n i++;\n}\n\nconst key = await ValueDialog.create({}, null, values);\nconst table = tables[key];\n\nconst results = (await table.drawMany(2)).results;\nconst uuids = results.map(result => `Compendium.${result.documentCollection}.${result.documentId}`);\n\nawait this.actor.addEffectItems(uuids, this.effect);\nthis.script.notification(\"TTirage de mutation effectué et appliqué\");","pvTcazVvW4v04otW":"if (args.totalWoundLoss > 0) {\n await 0rgs.actor.addCondition(\"poisoned\", 2)\n}","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n ws : game.wfrp4e.config.characteristics.ws,\n t : game.wfrp4e.config.characteristics.t,\n ag : game.wfrp4e.config.characteristics.ag,\n wp : game.wfrp4e.config.characteristics.wp\n}, this.effect.img), 1, \"Choisir la caractéristique\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","q5RgoYr12kBF6FA5":"return args.item?.system?.attackType == \"ranged\" && this.item == args.item && !this.actor.isOpposing","q8lOAWr2970sZeTw":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'challenging';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding)\n{\n if (args.test.succeeded)\n {\n let staunch = Number(args.test.result.SL) + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n }\n args.test.result.other.push(`${this.actor.name} enlève ${staunch} Etats Hémmoragie du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.Test.result.SL) < 0)\n {\n args.Test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n }\n}","qDYJnO2JosPJrjpz":"if (args.totalWoundLoss <= 0) return;\n\n// Poisoned handled by Venin trait\n\nconst test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"average\"},\n context: {\n failure: `Gain de 1 Point de Corruption.`\n }\n});\n\nawait test.roll();\n\nif (test.failed && args.actor.type === \"character\")\n args.actor.update({\"system.status.corruption.value\": args.actor.system.status.corruption.value + 1});\n\n\nawait args.actor.applyEffect({effects : this.item.effects.getName(\"Morsure du Crâne Pourpre\")})","qITSQMvvkgj81fW1":"return ![\"t\", \"s\"].includes(args.characteristic)","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\nlet fearData = fear.toObject();\nlet leaderData = leader.toObject();\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\t effectData.system.sourceData.item = this.item.uuid\n effectData.duration.seconds = 10800\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Vision Nocturne\") && !this.actor.has(\"Vision Nocturne\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\n{\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\n\nAP[\"head\"].value += 1;\nAP[\"rArm\"].value += 1;\nAP[\"lArm\"].value += 1;\nAP[\"body\"].value += 1;\nAP[\"lLeg\"].value += 1;\nAP[\"rLeg\"].value += 1;","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","qZ8TBagp2d4dJAqI":"return !args.weapon || args.weapon?.system.isMelee","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\nthis.actor.status.encumbrance.pct = 0;","qhjU1QdsfqA8h5iI":"return args.item?.system?.attackType != \"ranged\" || !this.item.equipped.value","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qmGwT929EiZ3lW2x":"if (args.weaponProperties.qualities.penetrating)\n{\n args.alreadyPenetrating = true;\n}\nelse \n{\n args.weaponProperties.qualities.penetrating = true;\n}","qmH61HmrEJcmQTiu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.tNWrJUOArwfWXsPw\");\nitem = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});","qmOt7h17hGAKqQe0":"\n\nif (!args.opposedTest.attackerTest.item?.system?.isMelee) \n{\n let choice = await foundry.applications.api.DialogV2.confirm({ window: { title: this.effect.name }, content: `

${this.effect.name}: Is this a ranged or magical attack that orignates outside the Dome?

` })\n\n if (choice) \n {\n args.ward = 6;\n }\n}\n","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\n\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\nlet scriptData = this.effect.system.scriptData;\n\nif (closed) {\n scriptData[0].label = \"Open\";\n} else {\n scriptData[0].label = \"Close\";\n}\n\nawait this.effect.update({\"system.scriptData\": scriptData});","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones > SL) {\n args.Test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Valeur d'unité utilisée comme DR`)\n }\n}","qxzhPtysAjPWspKf":"if (this.actor.has(\"Mort-vivant\") || this.actor.has(\"Démoniaque\"))\n{\n this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`);\n}","qyBmkCJo5606o4J9":"this.item.system.flaws.value = this.item.system.flaws.value.filter(i => i.name != \"weakpoints\")","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","rBAoyhzeU3Q8MVSk":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 50;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.script.notification(\"Impossible d'être surpris\");\n this.actor.removeCondition(\"surprised\");\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\n\narmour.name = \"Armour (Hide)\"\narmour.system.specification.value = 2\nbite.system.specification.value = 3\nfear.system.specification.value = 2\nweapon.system.specification.value = 4\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\n\n\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunité Psychologique}\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Régénération}\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Taille (Large)}\n\nblessed.system.specification.value = \"Ulric\"\nsize.system.specification.value = \"Large\"\n\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\n\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choisir des Traits Optionnels\");\n\nitems = items.concat(chosen || [])\nthis.script.notification(`Adding ${items.map(i => i.name).join(\", \")}`);\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","rJ8pspSekyDLkiqG":"return args.skill.name === game.i18n.localize(\"NAME.Cool\")","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\n{\n args.test.result.damage += 1\n args.test.result.additionalDamage += 1\n if (!args.test.result.resolute) {\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\n args.test.result.resolute = true // Prevent duplicate messages\n }\n}\n","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\nlet terrorTraitItem = item.toObject()\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\nif (this.actor.flags.holed.applied === true) return;\nif (this.actor.hasCondition(\"dead\")) return;\n\nconst currentHoled = this.actor.flags.holed.holed || 0;\n\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\n if (!m.name.toLowerCase().includes(\"gun port\"))\n return acc;\n\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\n if (!closed) acc++;\n\n return acc;\n}, 0);\n\nconst totalHoled = currentHoled + openGunPorts;\nconst toughness = this.actor.system.characteristics.t.value;\nthis.actor.flags.holed.total = totalHoled;\n\nif (totalHoled >= toughness) {\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\n this.script.message(`\n

${speaker.alias} coule en raison d'un score Percé (${totalHoled}) égal ou supérieur à sa Robustesse (${toughness })

\n

\n Percé en raison de dégâts critiques : ${currentHoled}
\n Percé en raison de sabords ouverts : ${openGunPorts}\n

\n `, { flavor: this.effect.name.split(\"(\")[0]});\n this.actor.addCondition(\"dead\");\n} else if (totalHoled >= (toughness * 0.5)) {\n this.actor.system.details.move.value -= 1;\n this.actor.system.details.man -= 1;\n this.actor.flags.holed.half = true;\n}\n\nthis.actor.flags.holed.applied = true;","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\n{\n this.actor.removeCondition(\"bleeding\");\n this.script.notification(\"Retiré 1 Etat Hémmoragie\")\n}\nelse\n{\n this.script.notification(\"Aucun Etat Hémmoragie\");\n}","ratP9ByLjQPiLlFK":"args.data.reversal = {allowed : true, if: \"success\"};","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postPeur(this.item.Advances, this.actor.name)","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (data.system.location.key[0] == \"r\")\n{\n\tdata.system.location.value = \"Cheville droite\"\n}\nelse if (data.system.location.key[0] == \"l\")\n{\n\tdata.system.location.value = \"Cheville gauche\"\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","rgnGu3IQrS8Vj9Op":"const bonus = game.settings.get(\"wfrp4e\", \"homebrew\").advantageBonus;\n\nargs.fields.modifier += bonus;","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\n return ui.notifications.warn(\"Vous devez cibler exactement un seul Bateau.\");\n\nconst target = game.user.targets.first();\nconst vehicle = target.actor;\n\nif (!(vehicle.system instanceof VehicleModel))\n return ui.notifications.warn(\"Vous ne pouvez Constrict qu'un Bateau\");\n\nif (vehicle.size > 3)\n return ui.notifications.warn(\"Vous ne pouvez Constrict que des navires de Taille Large ou plus petits\");\n\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\n\nconst mainEffect = this.item.effects.contents[0];\nconst effectData = mainEffect.toObject();\n\neffectData.statuses = [effectData.name.slugify()];\n\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\n\nawait this.actor.applyEffect({effectData: [effectData]});\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\n\nthis.script.message(`${speaker.alias} a commencé à s'enrouler autour du ${target.name} et pourra commencer à l'écraser après ${turns} tours.`);","roYVcP5Zqcsa8jVw":"args.actor.system.details.move.value -= 1;","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Lâchez l'objet!`}, skipTargets: true, appendTitle : \" - \" + this.effet.name, fields : {difficulty : \"average\"}})\nawait Test.roll();\n\n\nif (location && Test.Échoué)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Vous lâchez ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\nif (test.spell.lore.value == \"fire\")\n{\n if (test.result.overcast.usage.target?.AoE)\n {\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\n }\n if (test.result.overcast.usage.range)\n {\n test.result.overcast.usage.range.current *= 2\n test.result.overcast.usage.range.initial *= 2\n }\n \n}","s07GKMPCvQ8Heorc":"const value = this.effect.sourceActor.system.characteristics.wp.bonus;\nthis.script.message(await args.actor.applyBasicDamage(value, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));","s0kTuDE0qv68V2KI":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFBF00\"}}));\n","s5bO0Sf0qpS27Tve":"await args.actor.addCondition(\"ablaze\", 3)\nawait args.actor.addCondition(\"prone\");","s6eZXfZkC1My6EXl":"let lore = this.effect.name.split(\" \")[2].toLowerCase();\nif (args.item.type == \"spell\" && args.item.system.lore.value == lore)\n{\n args.item.system.cn.value = Math.max(0, args.item.system.cn.value - 1);\n}\n","s7kW3lm2eU5IPrLP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet dv = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.OzwDT6kzoLYeeR2d\")\nlet stealthy = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.XSb3QVB9ipPBFt56\")\nlet shadow = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [dv, stealthy, shadow], {fromEffect : this.effect.id});","s8idWt9YdMTRfnjV":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","s8xU6OOZbbfo6VIw":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus\n","s94yKZ4o5XN4JWM1":"// Any attack with such ammunition which inflicts at least one Wound,\n// also inflicts one Bleeding Condition.\n\nif (args.totalWoundLoss > 0) {\n args.actor.addCondition(\"bleeding\")\n}\n","s9J1TUkpGdvSWvPO":"this.actor.addCondition(\"blinded\");","s9KcytRE7i0cU06n":"if ([\"dragon\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.modifiers.other.push({label : this.effect.name, details : \"Blessures Doublées vs Dragons\", value : args.totalWoundLoss});\n args.totalWoundLoss *=2;\n }","sAVpm7hFRHpbCLXm":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"i\"].includes(args.characteristic)","sB4KB9bT3nQhAoqG":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choisir le Savoir\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","sHVLKIdPbzLVItCa":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 1;","sHfkTRqTWPg2JAGN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","sKO8TcLIkCTnFvXu":"args.abort = true;\nthis.script.notification(`Cannot use ${this.item.system.location.value}!`, \"error\")","sNSfDBIA2k17hPYI":"let ablaze = this.actor.hasCondition(\"ablaze\");\nif (ablaze)\n{\n\tablaze?.delete();\n\tthis.script.notification(\"État En Flammes ignoré\");\n}\n","sPvfYQEnyAYNpIhF":"let shouldDamage = await foundry.applications.api.DialogV2.confirm({\n window : {title: this.effect.name + \" - \" + args.actor.name},\n content: \"Êtes-vous une créature humanoïde qui n'a pas fait de sacrifice à Rhya (ou à une autre divinité de la nature ou esprit puissant de la nature auquel le culte de Rhya est bien disposé, comme Isha ou Taal) depuis le dernier équinoxe de printemps ?\"\n});\n\nif (shouldDamage) {\n let damage = 1 + this.effect.sourceTest.result.baseSL;\n await args.actor.applyBasicDamage(damage, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n args.actor.addCondition(\"fatigued\");\n}","sQDh3g11pWchxpW9":"return true","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\nlet data = item.toObject();\ndata.name = data.name.replace(\"Target\", \"Greenskins, Mort-vivant, Chaos\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","sbK1a7txpSoXFzyB":"if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n\n if (ones > SL) {\n args.Test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Utilisation de l'unité des dés comme DR`)\n }\n}","scfm5iWWBxWI6QaK":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","shkBUtUuMPDKvFm7":"let test = await this.actor.setupSkill(\"Esquive\", {fields : {difficulty : \"average\"}})\nlet caster = this.effect.sourceActor\n\nlet fallen = this.effect.sourceTest.result.SL + caster.characteristics.wp.bonus\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n this.script.message(`${this.actor.prototypeToken.name} falls ${fallen} yards`)\n}","sjnoYbWpAugyDilW":"let test = await args.actor.setupSkill(\"Charme\", {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'average'},\n characteristic: 'fel',\n context: {\n success: \"L'animal devient docile envers les Humains, les Elfes qui honorent Isha, et des alliés similaires.\"\n }\n});\nawait test.roll();","skVq3eDEYKFF2iZp":"// I'm assuming the endurance test specified is for the end-round check\nawait this.actor.addCondition(\"poisoned\", 4);\n","sm9d5lk6cM0OuUkf":"this.actor.applyPeur(Math.min(4, this.effect.sourceTest.result.overcast.usage.other.current))","svCqdytEOtqFXCcs":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 10,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 20,\n \"wp\" : 20,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Savoir (Magie)\" , \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\n\nlet talents = [\"Magie des Arcanes\", \"Magie Mineure\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\", \"Robes\", \"(2M) Bâton de combat\"]\nlet specialItems = [\n {name: \"Objet magique\", type: \"trapping\", trappingType: \"misc\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\n\nif (location == \"lArm\")\n{\n\tthis.script.notification(\"Bras Gauche\")\n}\nelse if (location == \"rArm\")\n{\n\tthis.script.notification(\"Bras Droit\")\n}\n\nthis.effet.updateSource({\"flags.wfrp4e.location\" : location});\n\nif (location)\n{\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\n\n if (dropped.length)\n {\n this.script.notification(`Lâche ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effet.updateSource({\"duration.rounds\" : roll.total})","syRJs8P4aBFB5USD":"if (this.actor?.system?.details?.god?.value !== \"Sigmar\") return\nif (this.actor?.currentCareer?.careergroup?.value !== \"Prêtre\" \n && this.actor?.currentCareer?.careergroup?.value !== \"Prêtre Guerrier\" ) return\n \nlet currentSin = this.actor.system.status.sin.value \nlet updatedSin = currentSin + 2\nawait this.actor.update({\"system.status.sin.value\": updatedSin})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunité Psychologique\")?.delete();\n\nlet roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n\nroll.toMessage(this.script.getChatData());\n\nthis.script.notification(`Removed Immunité Psychologique, Adding ${roll.total} Broken Conditions`)\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sz0PqS1kroMOzUZk":"let characteristics = {\n \"ws\" : -15,\n \"bs\" : -30,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : 0,\n \"int\" : -20,\n \"wp\" : 15,\n \"fel\" : -20\n}\nlet skills = [\"Corps à corps (Bagarre)\"]\nlet skillAdvancements = [10]\n\nlet talents = [\"Peurless (Everything)\", \"Frénésie\", \"Endurci\"]\nlet trappings = [\"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = []\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","t48hkacYdOpzWvK9":"args.context.beatBlade = true;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","tCIT1a12Gt6k2ohA":"let resistance\nif (this.item.name.includes(\"(\") && !this.item.name.toLowerCase().includes(\"(any)\"))\n{\n\tresistance = this.item.parenthesesText\n}\nelse \n{\n resistance = await ValueDialog.create({text : \"Entrez la Résistance\", title : \"Résistance\"}) \n \n if (resistance)\n {\n this.item.updateSource({name : `${this.item.name.split(\"(\")[0].trim()} (${resistance})`})\n this.effet.updateSource({name : this.effet.name + ` (${resistance})`})\n }\n} \nthis.item.updateSource({\"system.tests.value\" : this.item.system.Tests.value.replace(\"the associated Threat\", resistance)})\n\nif (resistance && !this.effet.name.includes(\"(\"))\n{\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\n}","tFAKRRRfTjQfdQz3":"this.actor.getActiveTokens().forEach(t => t.document.update({\"texture.tint\" : \"\"}));","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\nif (args.applyAP && nonmagical)\n{\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\n args.modifiers.ap.ignored += nonmagical\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore les PA non-magiques (\" + nonmagical + \")\");\n}","tHBlC7SpYiQ7SUGo":"return args.characteristic !== \"t\";","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n this.script.notification(`Suppression de ${fatigued.conditionValue} états Extenué`)\n fatigued.delete();\n}\nelse\n{\n\tthis.script.notification(`Aucun état Extenué`)\n}","tdICiJ26rJrDbxT6":"return args.characteristic != \"i\"","tg9N6aUo8WRPKj3H":"// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage.\nconst surprised = this.actor.hasCondition(\"surprised\")\nconst unconscious = this.actor.hasCondition(\"unconscious\")\nconst entangled = this.actor.hasCondition(\"entangled\")\nif (entangled || unconscious || surprised) return\n\n// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating.\nconst grimRating = parseInt(this.item.specification.value) || 1\nif (grimRating > this.actor.status.advantage.value) {\n this.actor.setAdvantage(grimRating)\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.system.specification.value = 1;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tkZ8Ybqu518LQYEn":"await args.actor.addCondition(\"ablaze\");\n\targs.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.4CMKeDTDrRQZbPIJ\", this.effect, [{\"system.specification.value\": \"Krezok Soulflayer\"}])","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\n\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\nthis.script.message(`Localisation: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","tpz88eQFTjWHdFL5":"return args.item?.system?.attackType != \"ranged\" || this.item != args.item || this.actor.isOpposing","tyQLkRLk1AXB4g2u":"if (args.test.succeeded) {\n args.test.result.critical = \"Critical\"\n\n args.test.result.tables.critical = {\n label : args.test.result.critical,\n class : \"Critique-roll\",\n modifier : args.test.result.critModifier,\n key: `crit${args.test.result.hitloc.result}`\n }\n\n args.Test.result.other.push (`${this.effect.name}: Tout les succès sont des Critiques.`)\n\n}","u3olS2p7Ls1JXfAH":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"mutatephys\", {}, \"Tzeentch\"));","u46KnlxCjP42F6QY":"let table = await fromUuid(\"RollTable.uATmVS40DQLC1woJ\");\n\nif (table)\n{\n table.roll();\n}\nelse\n{\n this.script.notification(\"Table des Traits de personnalité introuvable\", \"error\");\n}","u4fKgGFEnOCnvvsv":"return args.item?.system?.isProjectiles;","u5dNZ0s3lWfL8KFb":"return args.fields.charging","u6CYMSZADrfXd48Q":"args.fields.modifier += 20;","uA5qaat5EXzkzltq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n let plague = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aKiuGzlVO51JvsjV\")\n let obj = plague.toObject();\n await this.actor.createEmbeddedDocuments(\"Item\", [obj]);\n}\n\nthis.effect.delete();","uAy4w7y8Uu9POF8C":"args.item.system.qualities.value.push({name : \"impact\"})","uCJk19rijMPRU8jg":"return this.item.equipped.value \n && args?.weapon\n && ([\"giant\"].includes(args.target.Species.toLowerCase()))","uEVSUTTam4Z96JJ2":"if (this.item.equipped.value\n && args.opposedTest.attackerTest.item \n && (args.opposedTest.attackerTest.item.isProjectiles || args.opposedTest.attackerTest?.spell)\n ) \n{\n args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts\", value : -2})\n}","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n {\n this.actor.addCondition(\"unconscious\")\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.message(\"Gain de 1 Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n else\n {\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\n }\n}\nelse\n{\n return false;\n}","uMvD2HWFNGqCmrBM":"if (args.test.options.addChargingDice)\n{\n\targs.test.result.diceDamage = {formula: \"1d10\", value : Math.ceil(CONFIG.Dice.randomUniform() * 10) }\n\targs.test.result.additionalDamage += args.test.result.diceDamage.value;\n}","uNYstk3eXmWamhzs":"args.actor.addCondition(\"blinded\")","uOHAsKlkFuIaAmjb":"args.actor.modifyWounds(1)","uRiAvo9fb3U7FIIy":"if (!this.actor.has(\"Bénédiction de Puissance\",\"prayer\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.KSDrXcieyRc37YI7\", this.effect)","uZeNKQ24fToJ7qtY":"let addWounds = 0\nswitch (args.actor.system.details.size.value) {\n case \"lrg\": \n addWounds = 5\n break\n case \"enor\":\n addWounds = 10\n break\n case \"mnst\":\n addWounds = 15\n break\n}\nif (addWounds > 0) {\n args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : addWounds})\n}","ucF4aiJ1gpDB333G":"if (args.test.options.catfall && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) && !args.test.result.catfall)\n{\n args.test.result.other.push(`${this.effect.name}: Fall distance damage reduced by ${Number(args.test.result.SL) + 1} yards`)\n args.test.result.catfall = true; // Prevent duplicate messages\n}","ugL5IBB6R2yWyMWd":"if (args.totalWoundLoss > 0)\n{\n let apply = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : `

Appliquer les dégats de ${this.effect.name} ? L'attaquant doit avoir utilisé ses mains nues ou une arme de mêlée en métal.`})\n if (apply)\n {\n\n let damage = 5 + this.actor.characteristics.wp.bonus;\n\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\n\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\n\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\n\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n msg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\n this.script.message(msg)\n }\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'easy';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ulXfbycWUu36vdmS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\", slBonus : -1 * this.effet.sourceTest.result.SL}})\nawait Test.roll();\nif (Test.succeeded)\n{\n\tthis.script.notification(`Résistance à ${this.effect.name}`);\n}\nreturn test.failed;","ur2HAWDGSGvyAynU":"if (args.combat.combatant.actor.uuid === this.effect.sourceActor.uuid) {\n this.effect.delete();\n}","v00nVCRKqqRvY28t":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\", 3)\n}\n","v18mmwUmuKiVfwzQ":"let test = await this.actor.setupTest(game.i18n.localize(\"NAME.Résistance\"), {appendTitle : ` - ${this.effect.name}`, skipTargets: true});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\");\n}","v4CCxVaVGf9i8U7X":"let cured = await ValueDialog.create({text : \"Entrez le nombre de maladies/poisons soignés\", title : this.effect.name})\n\nlet damage = 0;\n\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet Test = new Roll(`${rolls.join(\" + \")}`);\nawait test.roll();\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\nthis.script.message(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let addOption = await foundry.applications.api.DialogV2.confirm({\n window : {title : \"Option\"},\n content :\n `\n Ajouter une option?\n

\n Projectiles (Arc) +10 et un Arc long avec 12 flèches\n

\n `,\n})\n\nlet choice = []\n\nif (addOption)\n{\n choice = [\n {\n type : \"skill\",\n name : \"Projectiles (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"(2M) Arc long\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche (12)\",\n }\n ];\n}\n\n\n\n\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","vBqrydNzHmEHClqZ":"let maxWounds = this.actor.system.status.wounds.max\nthis.actor.update({\"system.status.wounds.value\": maxWounds})","vFUVWZ1l8wpTjLcx":"if (!this.actor.has(game.i18n.localize(\"NAME.Démoniaque\")))\n return\n\nlet caster = this.effect.sourceActor;\nif (caster)\n{\n let wp = caster.system.characteristics.wp\n if (this.actor.system.characteristics.wp.value >= wp.value)\n {\n this.script.notification(\"La cible a une FM supérieure, pas d'effet\")\n return\n }\n this.actor.applyBasicDamage(wp.bonus, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL })\n}","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \n{\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields: { difficulty: \"difficult\" } }).then(async Test => {\n await Test.roll();\n if (Test.Échoué) \n {\n await args.actor.addCondition(\"poisoned\")\n this.script.message(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\n }\n })\n}","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","vNUGuypkhx2P5YIA":"return args.characteristic !== \"fel\"","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"hard\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData())\n\n this.script.message(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\n ChatMessage.create({\n content: `\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n })\n}\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.characteristics.t.initial += 10 * specification;\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","vc4bELo0cWYoILfB":"let choice = await ItemDialog.create(this.actor.itemTypes.disease, 1, \"Choisir une maladie à guérir (contractée naturellement)\")\n\nthis.script.message(`Guéri ${choice[0]?.name}`);\nchoice[0].delete()","vc8eVKtyjtOGvWlK":"if (!this.actor.hasCondition(\"entangled\"))\n{\n this.effect.delete();\n}","vcM0IgsYVmfWrlO3":"fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n})","ve3RcfTi49rdYZU0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Wounded\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Gain de \" + disease.name)\n })\n }","vejhfB9aI58iF1vr":"let choice1 = [\n {\n type: \"trait\",\n name: \"Maladie\",\n },\n {\n type: \"trait\",\n name: \"Infecté\",\n },\n {\n type: \"trait\",\n name: \"Perturbant\",\n },\n {\n type: \"trait\",\n name: \"Parasité\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n console.log(\"TEST1\", c);\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n console.log(\"TEST\", existing);\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n console.log(\"WISH LIST2\", choice1, items);\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\n\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","vgfs0DXvF5iKrz1M":"return args.characteristic != \"ag\" || this.item.getFlag(\"wfrp4e\", \"passed\")","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\nif (SL < 0)\n SL = 0\nthis.actor.addCondition(\"fatigued\", 1 + SL)","vn13U388mwquGN9y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.wGTD2LezlI6Atyy0\");\nlet leader = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.u0CFf3xwiyidD9T5\");\nlet luck = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [leader, luck], {fromEffect : this.effect.id});","vphNSTVxfZjApblV":"const bonus = this.effect.getFlag(\"wfrp4e-tribes\", \"bonus\");\n\nargs.fields.modifier += bonus;","vtXJI2VGlU9vODXz":"args.initiative += \"+10\";","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\nif (broken)\n{\n broken.delete();\n this.script.notification(\"Etat Brisé supprimée\")\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\nargs.modifiers.other.push({label : this.effect.name, value : -1)","vzSj3vvPryp02EVC":"if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet slOver = this.effect.sourceTest.result.slOver;\nlet overcast = this.effect.sourceTest.result.overcast\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\nlet added = Math.floor(slOver / 3) || 0\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4RuGIfseGoxXA3k":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","w4zubIHP0XgMXsFe":"return !args.context.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 60\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w8s2RUzA1jmyu7vy":"if (args.test.isCritical && args.test.weapon.weaponGroup.value == \"crossbow\") {\n args.test.result.tables.critical.modifier \n = (typeof args.test.result.tables.critical.modifier ==='undefined') \n ? 10 \n : args.test.result.tables.critical.modifier + 10\n}","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.context.staunchBleeding = true;","wBc8XvkAnv3j93vR":"if (Number(args.actor.system.status.fate.value) > 0) {\n args.actor.update({\"system.status.fate.value\": Math.max(args.actor.system.status.fate.value - 1, 0)});\n args.actor.update({\"system.status.fortune.value\": Math.max(args.actor.system.status.fortune.value - 1, 0)});\n this.script.message(`Réduction du Destin et de la Chance de 1`);\n}\nelse if (Number(args.actor.system.status.resilience.value) > 0)\n{\n args.actor.update({\"system.status.resilience.value\": Math.max(args.actor.system.status.resilience.value - 1, 0)});\n args.actor.update({\"system.status.resolve.value\": Math.max(args.actor.system.status.resolve.value - 1, 0)});\n this.script.message(`Réduction de la Résilience et de la Détermination de 1`);\n}","wFHjQyCR6Wzn6TeQ":"this.actor.system.status.addArmour(1, {source: this.effect, magical: true});","wLg8LbPAPbQgUg0Z":"return (args.item?.system?.attackType != \"melee\" \n || this.actor.attacker != undefined \n || args.target?.hasCondition(\"surprised\") == undefined)","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","wb1DpSdIhSqYG5cp":"args.fields.slBonus = -1 * parseInt(this.effect.sourceTest.result.SL)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\nlet msg = \"\";\nfor(let item of items)\n{\n if (item.system.properties.qualities.durable)\n {\n await item.update({\"system.qualities.value\" : []});\n msg += `

${item.name} perd toutes ses Qualités

`\n }\n else\n {\n msg += `

${item.name} se désintègre en poussière !

`\n await item.update({name : item.name + \" (Poussière)\"})\n }\n}\nif(msg)\n{\n this.script.message(msg);\n}","we6JUzDvybekAbtn":"return args.type !== \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","weDTna1dLMwHsNlJ":"args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts\", value : -4})","whUSkaR1yem21bXp":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 6,\n \"int\" : -5,\n \"wp\" : 0,\n \"fel\" : 10\n}\nlet skills = [\"Corps à corps (Base)\", \"Pistage\"]\nlet skillAdvancements = [8, 7]\nlet talents = [\"Charge Berserk\", \"Frappe précise\", \"Frappe blessante\"]\nlet traits = [\"Flight (8)\", \"Rage\", \"Nuée\", \"Pisteur\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name +='Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\nargs.item.system.qualities.value.push({name : \"magical\"});","wyTCozh9qGTx6yK0":"if (args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\targs.abort = true;\n\tthis.script.notification(\"N'a pas besoin de faire de tests de Peur ou de Terreur\");\n}","x1Ecj6MXY94kpcQq":"if (!this.item.equipped.value) {\n return this.script.notification(`Vous devez équiper le ${this.item.name} pour récupérer des points de blessures.`,\"info\")\n}\n\nconst runesOfRestoration = this.item.effects.contents.filter(e => e.name == this.effet.name)\nconst restorationWounds = parseInt(runesOfRestoration.length * this.actor.system.characteristics.t.bonus)\n\nthis.actor.modifyWounds(restorationWounds)\nthis.script.message(`Vous avez récupéré ${restorationWounds} blessures avec ${this.script.label}.`)","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nlet data = item.toObject();\nfoundry.utils.setProperty(data, \"flags.wfrp4e.breath\", \"fire\")\ndata.system.specification.value = 5\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\n}\nelse \n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\nChatMessage.create({content : \"La grâce dépasse le style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\n \"nobles\" : \"Nobles\",\n \"guilders\" : \"Membres de Guilde\",\n \"servants\" : \"Serviteurs\"\n}), 1, \"Choisir Group\")\n\nlet name = choice[0]?.name\n\nif (!name)\n{\n return;\n}\n\nif (item)\n{\n item.update({\n name : item.name.split(\"(\")[0] + ` (${name})`,\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\n })\n}\nelse\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\n let data = item.toObject();\n data.name += ` (${name})`\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\n scythe.name = \"La Faux de Shyish\";\n scythe.system.damage.value = \"WPB + 3\"\n scythe.system.equipped = true;\n scythe.img = this.effect.img;\n scythe.system.qualities.value.push({name : \"magical\"})\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","xEE0ymsaH2tn2M99":"return args.type != \"cast\";","xIRU2SaqLeWmqGDI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\")\nlet data = item.toObject();\ndata.name += \" (Disease)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xJZKVGE04o84Gibo":"if (!this.item.actor.name.includes(\"Brunner\")) return;\n\nargs.item.system.damage.value += \"+1\";","xL4S0H1RP8hhXW7c":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xneBqGOs1QS7kfUr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xLKAuD6yzwjAL6tJ":"return !args.weapon || args.weapon?.system.properties?.qualities.shield || !this.item.system.usesLocation(args.weapon)","xMhhVol8Is3DJ3gb":"if (this.effect.sourceTest.succeeded)\n{\n let blinded = 1 + this.effect.sourceTest.result.overcast.usage.other.count\n this.actor.addCondition(\"blinded\", blinded)\n}","xPDMpOvC1ZBVxrNg":"args.fields.modifier += 10;","xPwa3NftkpMBc2AO":"return ![\"ws\", \"s\", \"ag\"].includes(args.characteristic)","xQ3xR2Wf0wHFa76H":"return [\"ws\", \"bs\", \"fel\", \"dex\"].includes(args.characteristic) || args.weapon","xQnoRTHotZKrwPrx":"return args.type == \"cast\" && args.item?.system.lore?.value == \"shadow\"","xRTmMwNfdirjsi8X":"this.actor.addCondition(\"ablaze\");\n\nthis.actor.applyBasicDamage(this.effect.sourceTest.result.damage)","xUpKYT7BZCSmAfUy":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","xYTkj8jhSVOSoLbC":"this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] = true;","xcny1zYAphdfrKv9":"args.fields.modifier -=20;","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\n}","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils subissent –20 à toutes les tentatives de résistance aux maladies.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","xihniGjgqOhuaKWc":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","xiyQSXozoLxt0MZs":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.wMwSRDmgiF2IdCJr\", // utilisateur d\n \"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\", // Immunité Psychologique\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","xkdQhZ9KKqmocNLO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.tXKX29QZBdHmyMc7\")\nlet data = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xklncIMwQIespDxS":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : \"vhard\"}});\nawait Test.roll();\nCorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData())\n\nif (Test.Échoué)\n{\n this.actor.addCondition(\"unconscious\");\n}","xnHobI9HojObLHMp":"args.applyTB = false;\nargs.applyAP = false;","xot4JWCRzLkobHtL":"args.actor.removeCondition(\"broken\", 1);","xpgXWoK2zDnG1uiF":" let stunned = args.actor.hasCondition(\"stunned\")\n if (stunned)\n {\n stunned.system.scriptData = stunned.system.scriptData.filter(s => s.trigger != \"dialog\")\n stunned.system._scripts = null;\n }\n\n\n\n let poisoned = args.actor.hasCondition(\"poisoned\")\n if (poisoned)\n {\n poisoned.system.scriptData = poisoned.system.scriptData.filter(s => s.trigger != \"dialog\")\n poisoned.system._scripts = null;\n }\n\n\n\n let deafened = args.actor.hasCondition(\"deafened\")\n if (deafened)\n {\n deafened.system.scriptData = deafened.system.scriptData.filter(s => s.trigger != \"dialog\")\n deafened.system._scripts = null;\n }\n\n\n\n\n let entangled = args.actor.hasCondition(\"entangled\")\n if (entangled)\n {\n entangled.system.scriptData = entangled.system.scriptData.filter(s => s.trigger != \"dialog\")\n entangled.system._scripts = null;\n }\n\n\n\n\n let fatigued = args.actor.hasCondition(\"fatigued\")\n if (fatigued)\n {\n fatigued.system.scriptData = fatigued.system.scriptData.filter(s => s.trigger != \"dialog\")\n fatigued.system._scripts = null;\n }\n\n\n\n let blinded = args.actor.hasCondition(\"blinded\")\n if (blinded)\n {\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\n blinded.system._scripts = null;\n }\n\n\n\n let broken = args.actor.hasCondition(\"broken\")\n if (broken)\n {\n broken.system.scriptData = broken.system.scriptData.filter(s => s.trigger != \"dialog\")\n broken.system._scripts = null;\n }\n\n\n\n let prone = args.actor.hasCondition(\"prone\")\n if (prone)\n {\n prone.system.scriptData = prone.system.scriptData.filter(s => s.trigger != \"dialog\")\n prone.system._scripts = null;\n }\n\n","xq3RANOtmPhy77ne":"args.update({texture : {tint : \"#FFBF00\"}});","xqWxV9w5ezBQdJkZ":"return args.context.corruption;","xvGxwv7X0Vq3vNqb":"args.fields.modifier -= 10;","y3F1K1sYBymPZCjz":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = [\"Athlétisme\", \"Soin aux animaux\", \"Langue (Bataille)\", \"Corps à corps (Base)\", \"Corps à corps (Cavalerie)\", \"Chevaucher\"]\nlet skillAdvancements = [10,10, 10, 10, 10, 20]\n\nlet talents = [\"Cavalier émérite\", \"Coup puissant\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Lance de cavalerie\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n {name: \"Chaos Steed\", type: \"trapping\", trappingType: \"misc\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","y3agVFVBR8tVqWyx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","y7hk7prQ0lLTyv1Y":"return args.item?.system?.isProjectiles && (args.item.system.weaponGroup.value !== \"blackpowder\" || args.item.system.weaponGroup.value !== \"engineering\")","y9fwuiqn44t13WAq":"return this.item.equipped.value \n && args?.weapon\n && ([\"goblin\"].includes(args.target.Species.toLowerCase()))","yAL0YwZWVm8o1nxa":"if (this.actor.hasCondition(\"dead\") && !this.actor.gardenOfCorpses)\n{\n this.script.message(\"[[3d10]] @UUID[Compendium.wfrp4e-core.actors.T79RqnDOAQLn3I1s]{zombies} spring forth from the remains.\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n this.actor.gardenOfCorpses = true;\n // local storage is sufficient to prevent multiple messages\n}","yCgH3N9AurIiAv0i":"if (!this.item.name.includes(\"(\") || this.item.system.Tests.value.includes(\"(Sense)\") || this.item.system.Tests.value.toLowerCase().includes(\"(any)\"))\n{\n let Tests = this.item.system.Tests.value\n let name = this.item.name\n\n // If name already specifies, make sure Tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let sense = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${sense})`;\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n taste : \"Goût\",\n sight : \"Vue\",\n smell : \"Odorat\",\n hearing : \"Ouïe\",\n touch : \"Toucher\"\n }, this.item.img), 1, {title : this.item.name, text : \"Choisissez un Sens\"});\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = `${tests.split(\"(\")[0].trim()} (${choice[0].name})`\n }\n }\n\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","yDvxF9llUYwJg0sE":"if (getProperty(args.data, \"system.loaded.value\") == true)\n{\n let repeaterValue = Math.ceil(CONFIG.Dice.randomUniform() * 10);\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value);\n let repeater = qualities.find(i => i.name == \"repeater\")\n if (repeater)\n {\n repeater.value = repeaterValue\n }\n else \n {\n qualities.push({name : \"repeater\", value : repeaterValue})\n }\n foundry.utils.setProperty(args.data, \"system.loaded.amt\", repeaterValue)\n this.item.update({\"system.qualities.value\" : qualities});\n this.script.notification(\"Repeater \" + repeaterValue);\n}\nelse if (foundry.utils.getProperty(args.data, \"system.loaded.value\") == false)\n{\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value).filter(i => i.name != \"repeater\");\n this.item.update({\"system.qualities.value\" : qualities});\n}","yFMvxecXAZ6T2O0S":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.message(`Two @UUID[Compendium.wfrp4e-eis.actors.cLOGeMqUty61nYB9]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","yMMzZ7daCqRlGT3N":"let item = args.opposedTest.attackerTest.item;\nif (!item.isMagical && (item.type == \"weapon\" || item.type == \"trait\"))\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Retirer l'Indice de Dégâts\", value : -1 * (args.totalWoundLoss - args.opposedTest.result.differenceSL)})\n}\n","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","yQziCK8G8I1RYkTj":"let add;\nif (args.opposedTest?.attackerTest?.weapon?.isProjectiles && args.opposedTest?.result.hitloc?.value === \"head\") {\n add = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\n}\n\nif (add) {\n\n args.modifiers.ap.metal++;\n args.modifiers.ap.used++;\n args.modifiers.ap.value++;\n args.modifiers.ap.details.push(\"+1 PA contre les attaques à distance de face\");\n}","yTmRoUstxHMso91c":"if (args.item.name == game.i18n.localize(\"NAME.MagicResistanceTrait\") && args.item.type == \"trait\")\n{\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\n}","yYNBZjmBnytXpRn3":"this.actor.reset();","yamap8V6Gx2Z9Smu":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.nWLsoWQBCjPRKxYx\", // Robust\n \"Compendium.wfrp4e-core.items.Item.jviOQmy0luQOySC2\", // Tenacious\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","ybxDG2ezvRx02LYx":"return !args.context.corruption","ynNCBAYwJFkTiXV1":"this.actor.system.status.addArmour(4, {source : this.effect})","ynV7tz0OdCwlsQp6":"let msg = \"\"\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\n\nthis.script.message(msg);","ynoHNXXCGRS6fTqF":"let msg = \"\"\n\nlet i_gain = (await new Roll(\"1d10\").roll()).total\n\nif (args.actor.characteristics.i.value <= 0)\n{\n i_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nmsg = `${this.actor.prototypeToken.name} gagne ${i_gain} Initiative`\n\nlet newValue = i_gain + args.actor.characteristics.i.modifier\n\nthis.actor.update({\"system.characteristics.i.modifier\" : newValue})\n\n\nlet hitloc = await game.wfrp4e.tables.rollTable(\"hitloc\")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effet.updateSource({\"flags.wfrp4e.location\" : value})\n\nmsg += ` alors que des yeux sortent de leur ${desc}`\n\nthis.script.message(msg)","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yvtF2t9aibxibAIM":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain de l'état @Condition[Prone].`,\n success: `Capable de bouger.`\n }\n});\n\nawait test.roll();\n\nif (test.failed)\n this.actor.addCondition(\"prone\");","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\n\tthis.script.notification(\"Effets secondaires appliqués\");\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","z8W5PAwBR0PXY6ty":" await args.actor.addCondition(\"ablaze\");\n await args.actor.addCondition(\"blinded\");\n await args.actor.addCondition(\"poisoned\", 2);","z8mwLihZQu0JtUHY":"\nlet characteristics = {\n \"ws\" : 20,\n \"bs\" : 20,\n \"s\" : 0,\n \"t\" : 20,\n \"i\" : 30,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 65,\n \"wp\" : 70,\n \"fel\" : 20\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Intimidation\", \"Langue (Magick)\", \"Language (Nehekharan)\", \"Commandement\", \"Savoir (Magie)\", \"Perception\"]\nlet skillAdvancements = [20, 30, 25, 30, 20, 20, 30, 20]\nlet talents = [\"Harmonisation Aethyrique\", \"Magie des Arcanes (Domaine)\", \"Dur à cuire\", \"Diction Instinctive\", \"Perception de la magie\", \"Menaçant\", \"Menaçant\", \"Magie Mineure\", \"Lire/Écrire\", \"Seconde Vue\", \"Mage de guerre\"]\nlet trappings = [\"Arme simple\"]\nlet specialItems = [ \n {name: \"Mouldering Robes\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Pouches containing ritual components\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Staff\", type: \"weapon\", damage: \"SB+2\"}, \n {name: \"Magie Noire (Nécromancie)\", type: \"talent\"},\n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","z926Cl2vxUfyLY0V":"if (![\"rArm\", \"lArm\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true\n\nreturn [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","z9NEbIUBsKMaTuCz":"if (args.opposedTest.result.hitloc && args.opposedTest.result.hitloc.value == \"head\") \n{\n args.actor.addCondition(\"entangled\")\n}","zBHTIBU8OlYj1YIO":"args.fields.modifier += this.effect.sourceActor?.system.characteristics.wp.value;","zF1IKmobCB8ea58M":"return this.sourceActor.uuid === this.actor.uuid || ![\"ws\", \"ag\"].includes(args.characteristic);","zGwtyjTUBeSQ110p":"if (args.opposedTest.attackerTest.preData.charging) \n{\n let mostProtectedLoc;\n let mostProtectedValue = 0;\n for (let loc in this.actor.status.armour) \n {\n if (this.actor.status.armour[loc].value != undefined && this.actor.status.armour[loc].value > mostProtectedValue) \n {\n mostProtectedLoc = loc;\n mostProtectedValue = this.actor.status.armour[loc].value;\n }\n }\n if (mostProtectedValue)\n {\n args.modifiers.other.push({label: this.effect.name, value : mostProtectedValue});\n }\n}","zI5hXv2NLGWqnmDD":"if (args.totalWoundLoss > 0)\n{\n\targs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})\n}","zIErcRiBmIZRbary":"if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","zIpl3SkWv8zzlr2D":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = (await ItemDialog.createFromFilters(filters, 4, {text : \"Choisissez 4 Sorts Mineurs\"})).map(i => i.toObject());\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"death\"]\n }\n]\n\nlet arcane = (await ItemDialog.createFromFilters(filters, 8, {text : \"Choisissez 8 Sorts d'Arcane et Savoir de la Mort\"})).map(i => i.toObject());\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"name\",\n value: /^((?!\\().)*$/gm, // Remove all spells with parentheses (all arcane spells spells)\n regex: true\n },\n {\n property : \"system.lore.value\",\n value : \"necromancy\"\n }\n]\n\nlet necromancy = (await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 dans le Savoir de Nécromancie\"})).map(i => i.toObject());\n\nlet items = [...necromancy, ...petty, ...arcane]\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Hémorragique ajouté\")\n}","zL7ECmBBMAqf5Esn":"let hasMagazine = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content: \"

Le navire a-t-il un magasin ou tout autre type de réserve pour la poudre noire ?

\"});\n\nif (!hasMagazine) return;\n\nlet roll = new Roll(\"d10\");\nawait roll.evaluate();\n// await roll.toMessage();\nlet anchor = roll.toAnchor();\n\nlet crits = [];\n\nfor (let i = 0; i < roll.total; i++) {\n let result = await WFRP_Tables.rollTable('crithull');\n let collection = game.packs.get(result.object.documentCollection)\n\n if (collection)\n await collection.getDocuments()\n\n if (!collection)\n collection = game.items;\n\n let item = collection.get(result.object.documentId)\n if (item)\n crits.push(item);\n}\n\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\nthis.script.message(`

${this.item.name} provoque un nombre supplémentaire de ${anchor.outerHTML} Coups Critiques à la Coque!

  • ${uuids.join('
  • ')}
`)","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zWZG8OmxqTpzHjFV":"args.actor.characteristics.ag.modifier -= 10;\n\n if (args.actor.details.move.value > 3)\n {\n args.actor.details.move.value -= 1;\n if (args.actor.details.move.value < 3)\n args.actor.details.move.value = 3\n }","zXh8rgMxWoCLTxVd":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'challenging';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","zadppy7FEbXvgUON":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 5\n}\nlet skills = [\"Perception\", \"Escamotage\", \"Discrétion (Urbaine)\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = [\"Criminel\", \"Etiquette (Criminals)\"]\nlet trappings = [\"Corde, 10 mètres\", \"Lockpick\", \"Masque\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","zasFOZohkrdFIBwr":"let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier","zdGAvfL7zJ7wpYxG":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'easy';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","zjTEhJuLcFVkzory":"if (!args.test.preData.options?.kingship) return\n\nif (!this.item.equipped.value || !args.test.item) return;\nif ([game.i18n.localize(\"NAME.Charm\"), \n game.i18n.localize(\"NAME.Intimidate\"), \n game.i18n.localize(\"NAME.Leadership\")].includes(args.test.item.name))\n{\n args.test.preData.canReverse = true\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\n if (target.actor.details.size.value == \"tiny\")\n modifier = 30\n if (target.actor.details.size.value == \"ltl\")\n modifier = 20\n if (target.actor.details.size.value == \"sml\")\n modifier = 10\n\t\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\n\nAP[\"head\"].value += 2;\nAP[\"rArm\"].value += 2;\nAP[\"lArm\"].value += 2;\nAP[\"body\"].value += 2;\nAP[\"lLeg\"].value += 2;\nAP[\"rLeg\"].value += 2;","zphxI8VSWbNQCMBy":"args.size = \"lrg\"","zqShIJnrRReGgP94":"let {added, removed} = this.effect.getFlag(\"wfrp4e\", \"propertiesChanged\");\n\nfor(let property of (added || []))\n{\n let hasValue = game.wfrp4e.config.propertyHasValue[property];\n if (!args.item.system.qualities.value.find(i => i.name == property))\n {\n args.item.system.qualities.value.push({name : property, value : (hasValue ? 2 : null)})\n }\n}\n\nfor(let property of (removed || []))\n{\n args.item.system.flaws.value = args.item.system.flaws.value.filter(i => i.name != property)\n}","zsoTVkHe4nHY1M52":"this.script.message(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","zxG5KbliWE9xWNQD":"this.script.message(\"Réussit automatiquement tout \" + this.script.label);\nargs.abort = true;"}); + mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isProjectiles && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\n// takes 3 Poisoned Conditions that cannot be resisted at first,\nawait this.actor.addCondition(\"poisoned\", 3)\n\n// recovers a number of Wounds equal to their Toughness Bonus,\nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n\n// and acquires the Régénération Creature Trait.\nconst hasRégénération = this.actor.has(\"Régénération\")\nif (hasRégénération === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\n let traitItem = trait.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n}\n\nthis.script.message(`

${this.actor.prototypeToken.name} a :\n

    \n
  • Acquis 3 états Empoisonné qui ne peuvent pas être résistés au début du round.
  • \n
  • Récupération de ${this.actor.system.characteristics.t.bonus} Blessures
  • \n
  • Acquisition du Trait de Créature Régénération.
  • \n
\n C’est à Ranald de décider si leur régénération peut dépasser leur empoisonnement.

\n

Lorsque tous les états Empoisonné sont perdus, la Régénération l’est aussi.

`,\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","07tvKnPT8ICtv2us":"if (args.test.result.misfire && args.test.result.roll !== 100) {\n delete args.test.result.misfire\n}","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\n{\n args.fields.modifier += 10;\n args.flags.quietenedApplied = true\n}","0BP5l7bIkf744G1k":"return !args.context.terror && !args.extendedTest?.flags.wfrp4e?.fear","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\", true, [\"system.lore.value\"])\n\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\n\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\n\nif (text == \"GM's Choice\")\n{\n return this.script.notification(text)\n}\n\nif (spellsWithLore.length > 0)\n{\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\n this.script.notification(selectedSpell.name);\n this.actor.createEmbeddedDocuments(\"Item\", [(await fromUuid(selectedSpell)).toObject()])\n}\nelse\n{\n ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)\n}","0H2syk6qc0sCY0pj":"if ( args.actor.has(game.i18n.localize(\"NAME.AA\"), \"talent\") ||\nargs.actor.has(game.i18n.localize(\"NAME.SecondSight\"), \"talent\") ) {\n\targs.modifiers.other.push({label : this.effect.name, value : 5, details : \"La Cible possède Harmonisation Aethyrique ou Seconde Vue\"});\n}","0IAc5VFR2ogXOaGE":"return args.characteristic != \"int\" || args.type != \"characteristic\"","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\nlet data = item.toObject();\ndata.system.specification.value = fixation.result;\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0NAD1LNcVyAZ1fC7":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\") && args.skill?.name !== game.i18n.localize(\"NAME.Résistance\");","0PzfGjGhHQbxEwlb":"this.item.update({\"system.AP\" : {lArm : 0, rArm : 0, lLeg : 0, rLeg: 0}});","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\nif (!table)\n{\n\treturn ui.notifications.error(\"Table de Mutation introuvable, veuillez vous assurer qu'une table avec la clé `mutatephys` est importée dans le monde.\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.notification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse\n{\n ui.notifications.error(\"Impossible de trouver l'objet : \" + uuid)\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","0amHqfjTRp5ff6Op":"let wounds = this.effect.sourceActor.system.characteristics.wp.bonus;\nthis.actor.modifyWounds(wounds);\nthis.script.message(`Soigne ${wounds} Blessures`);","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\n\nlet data1 = item1.toObject();\ndata1.system.location.key = this.item.system.location.key\n\nlet data2 = item2.toObject();\ndata2.system.location.key = this.item.system.location.key\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\n","0hAbiNR1nFkpFMRz":"if (!this.actor.has(game.i18n.localize(\"NAME.SecondSight\"),\"talent\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\", this.effect)","0hgTyeaEhMBLwzUn":"let fearCounter = this.item.effects.filter(i => i.name == this.effect.name).length;\n\nfearCounter += Number(this.actor.has(\"Peur\")?.system.specification.value) || 0\n\ngame.wfrp4e.utility.postPeur(fearCounter || 1, this.effect.name)","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\n{\n\targs.test.result.other.push(`${this.effect.name}: Echec Automatique`)\n}","0kUalAsb4OhtYbaJ":"return args.item?.system?.attackType == \"ranged\" && !this.actor.system.canFly.effects.filter(e => e.name == \"Flying\")[0].disabled","0uUxvBLJC76WIIBC":"let species = await ValueDialog.create({text : \"Saisir l'espèce cible (singulier)\", title : this.effect.name})\n\nthis.effect.updateSource({name : this.effect.setSpecifier(species)});","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\n{\n args.flags.strikeToStun = true\n args.fields.modifier += 20;\n args.fields.hitLocation = \"head\";\n}\nargs.fields.successBonus++;","0wR0LWpfhLFA240I":"let value = await ValueDialog.create({\n title : this.script.label, \n text: \"Notes de Victoire pour le Journal d'Expérience\"\n});\nvalue \n ? this.actor.system.awardExp(50, value) \n : this.actor.system.awardExp(50, this.script.label)","0wmIC2MssUX6LW3N":"if (args.test.options.doomboltRolled)\n{\n\targs.test.result.damage += 4;\n}","0yyofYHeDRQlFliO":"return args.context.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif ([\"fire\", \"electricity\", \"poison\"].includes(type))\n{\n args.applyAP = false;\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\nthis.effect.update({\"disabled\": state});\n\nif (state)\n return ui.notifications.info(\"Effet.CreatureBackInWater\", {localize: true})\n\nreturn ui.notifications.info(\"Effet.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\") || this.item.system.tests.value.toLowerCase().includes(\"(any)\"))\n{\n let Tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure Tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let terrain = name.split(\"(\")[1].split(\")\")[0]\n tests = tests.replace(\"the Terrain\", terrain)\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n coastal : \"Littoral\",\n deserts : \"Déserts\",\n marshes : \"Marécages\",\n rocky : \"Rocailleux\",\n tundra : \"Toundra\",\n woodlands : \"Régions boisées\"\n }, this.item.img), 1, \"Choisissez un Terrain\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = tests.replace(\"Terrain\", choice[0].name + \" Terrain\")\n }\n }\n\n this.effect.updateSource({name})\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","1BT0MWM2cbhlEnrn":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 5,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 5,\n \"dex\" : 5,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\n let talents = (await Promise.tout([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\n\n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n\n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n }\n\n\n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n","1CeYp5MlPcH68UIw":"let characteristics = {\n \"ws\" : 15,\n \"bs\" : 10,\n \"s\" : 10,\n \"t\" : 15,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Intimidation\", \"Commandement\", \"Perception\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = [\"Vigilance\", \"Coude-à-coude\", \"Menaçant\", \"Robuste\"]\nlet trappings = [\"Arme simple\", \"Cotte de Mailles\", \"Chausses de Mailles\"]\nlet specialItems = [\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1Du4e27M8WgP2iui":"if (args.equipped === true && this.actor.name !== \"Kurgorn Three-eyes\")\n{\n this.actor.addCondition(\"blinded\", 1, {\"statuses\" : [\"blinded\", \"blind\"]})\n this.script.notification(`Aveuglé en portant ${this.item.name}`);\n}\n\nif (args.equipped === false && this.actor.name !== \"Kurgorn Three-eyes\")\n{\n this.actor.removeCondition(\"blinded\")\n}","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\nawait this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\nawait test.roll()\nif (test.succeeded)\n{\n this.effect.delete();\n}\n","1OpT3CXs07XFWWCT":"args.context.cardsharp = true;","1PPh4vHd5sPKtudZ":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\", this.effect)","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n}\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1UvL0XA1EpQtjDNn":"let effects = this.item.effects.contents.filter(i => i.id != this.effect.id);\n\nlet choice = await ItemDialog.create(effects, 1, {title : this.effect.name, text: \"Choisissez une Rune\"});\n\nif (choice[0])\n{\n choice[0].performEffectApplication();\n}","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain de 1 état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n args.actor.addCondition(\"stunned\")\n}\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","1exiWlVUHsXDLLAH":"this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\nthis.actor.modifyWounds(healed)\nthis.script.message(`Soin de ${healed} Blessures`)","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\n\nlet loc = \"body\"\n\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\nthis.script.message(msg)\n\nlet Test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n\tthis.actor.addCondition(\"stunned\");","1l7Jz2ZHbAWko7Vm":"args.context.ballockKnife = true;","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\n args.data.damage -= 1","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choisir la localisation\");\n\nlet location = choice[0].id;\n\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\n\nif (itemTargeted)\n{\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\n}","1yOvw74jzFfaI87b":"return args.context.reload\n","20fvE9nJmcfGYVzw":"if ( args.totalWoundLoss > 0 ) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"average\"})\n await test.roll();\n if (!test.succeeded)\n { \n this.actor.addSystemEffect(\"gangrene\");\n }\n}","22PMOW0G5MWiBQmg":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nawait this.actor.createEmbeddedDocuments(\"Item\", [fear], {fromEffect : this.effect.id})","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\nargs.item.system.damage.value += `+${sl}`;","2AOo7KUyzMrgIlgM":"CorruptionMessageModel.createCorruptionMessage(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\n","2EAYX5G9Fh3HJwiP":"let broken = this.actor.hasCondition(\"broken\");\n\nif (broken) {\n broken.delete();\n this.script.notification(\"Etat Brisé supprimé.\");\n}","2Ej6LUqn8frTRURo":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {difficulty: \"hard\"})\nawait test.roll();\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"unconscious\");\n}","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2IPTF0akWw9y48br":"return !this.item.equipped.value \n || !args?.weapon\n || !([\"goblin\"].includes(args.target.Species.toLowerCase()))","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = this.item.specifier;\n if (!value)\n {\n value = await ValueDialog.create({text : \"Entrez la valeur d'Armure\", title : this.effect.name});\n }\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value, name : this.item.baseName});\n }\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true;\n\nif (args.context.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2S6XlGCdRlXuaaVw":"this.actor.system.status.corruption.value += 1","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\n{\n args.bleedingHand = true;\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\n if (!success)\n {\n args.abort = true;\n }\n}","2XXqxAF5s5Sws6qj":"this.actor.system.status.corruption.value += 2","2XaJNYUMQAmSOsqi":"const {targetUuid} = this.effect.flags.wfrp4e;\n\nif (args.attacker.uuid !== targetUuid) return;\n\nlet recordedWounds = this.effect.getFlag(\"wfrp4e\", \"damageToReturn\") ?? 0;\n\nrecordedWounds += args.totalWoundLoss;\n\nthis.effect.setFlag(\"wfrp4e\", \"damageToReturn\", recordedWounds);","2Yh4vQm0ZJukRH1x":"return !args.skill?.name.includes(\"Focalisation\");","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\n{\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","2kRwCc31fuZgrsy8":"CorruptionMessageModel.createCorruptionMessage(\"major\", this.script.getChatData());","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\n ui.notifications.notify(`${this.effect.name}: Gain de ${this.item.Advances} Avantage(s)`)\n this.actor.setAdvantage(this.item.Advances)\n }\n}","2uyajbon5QX1CewS":"return args.skill?.name == \"Voile (Aéronavale)\"","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yW0kuwLfgRzJR2S":"const duration = 3600 * (1 + Number(this.effect.sourceTest.result.SL));\nthis.effect.update({\"duration.seconds\": duration});","2yctEihGmdCfTTVx":"args.data.reversal = {allowed : true, if: \"success\"};\nargs.context.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\nif (wounds.value == 0)\n return this.script.notification(\"Aucun effet à 0 Blessures\", \"error\")\n\nthis.script.notification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\n{\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\n}","33US8YRgaMqYu2We":"return !args.context.handling","37UN17gb8suFeZIW":"this.script.message(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\nargs.actor.system.details.price.gc *= 1.1;","3CeKfDcMEVgQlcXm":"await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\", this.effect, {name: \"Haine (Tous les ennemis)\"});","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.Test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\nif (fatigue)\n{\n this.script.notification(\"Etat Extenué - Suppression de la condition Extenué, effet désactivé\")\n this.effect.update({disabled : true})\n await this.actor.removeCondition(\"fatigued\")\n}","3KH6OE7L7uJESI2Z":"if ([\"dragon\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.applyTB = false;\n args.opposedTest.result.other.push(\"Wyrmslayer: Ignore le BE contre les Dragons\")\n }","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3SuLF6SImYWEHMo2":"args.context.doombolt = true;","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\n\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\n\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\n{\n args.item.qualities.value.push({name : \"penetrating\"})\n args.item.qualities.value.push({name : \"impale\"})\n}","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3eSaX0BeaUalNkEP":"return args.context.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3ixqbsEMfSSTzAXU":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n difficulty: \"challenging\",\n context: {\n failure: \"Subi l'état @Condition[Fatigued] à cause de cauchemars.\",\n success: \"A souffert de cauchemars, mais a assez bien dormi.\"\n }\n});\nawait test.roll();\n\nif (test.failed) {\n await this.actor.addCondition(\"fatigued\");\n}","3j8yybMaAZSwzxIE":"let weaponData = await this.effect.setFlag(\"wfrp4e\", \"weaponData\", this.item.system.toObject());\n\ntry {\n\n\n await this.item.update({\n system: {\n \"weaponGroup.value\": \"throwing\",\n \"qualities.value\": this.item.system.qualities.value.concat([{ name: \"accurate\" }]),\n \"range.value\": \"SB * 3\",\n \"consumesAmmo.value\" : false\n }\n })\n\n let test = await this.actor.setupWeapon(this.item, {}, {resolveClose : true});\n await test?.roll();\n this.item.update({ system: this.effect.getFlag(\"wfrp4e\", \"weaponData\") })\n}\ncatch (e) {\n this.item.update({ system: this.effect.getFlag(\"wfrp4e\", \"weaponData\") })\n}","3jm0NoYpgB6ZuUSl":"args.context.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.message(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\nthis.actor.addCondition(\"ablaze\");","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3na3lnAt3bfysvcD":"const blinded = this.actor.hasCondition(\"blinded\");\nif (!blinded)\n this.actor.addCondition(\"blinded\");","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\nawait args.actor.addCondition(\"prone\")","42UATqzohYML6a9t":"if ( !this.actor.hasCondition(\"poisoned\") ) {\n\tthis.effect.delete();\n}","4AO7Fowek5sSmE4g":"const venomUUID = \"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\";\nconst venom = this.actor.itemTags.trait.find(t => t.name === \"Venin\");\n\nif (venom) {\n await this.effect.setFlag(\"wfrp4e-tribes\", \"venom\", {\n _id: venom.id,\n \"system.specification.value\": venom.system.specification.value\n });\n await venom.update({\"system.specification.value\": \"Difficult\"});\n} else {\n await this.actor.addEffectItems(venomUUID, this.effect, {\n \"system.specification.value\": \"Challenging\"\n });\n}","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4KYraZSHAEYmL6xx":"if (this.item.equipped.value && args.totalWoundLoss > 10) {\n args.totalWoundLoss = Math.min(10, args.totalWoundLoss)\n args.extraMessages.push(`${this.effect.name}: Perte de Blessures limitée à 10`)\n}","4MQ7u4INxp51oyyR":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Inspiring\", \"Déterminé\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","4OlwxU60UqKg81yb":"const target = args.actor;\n\nif (target.has(\"Éthéré\") || target.has(\"Corruption\")) {\n args.totalWoundLoss += 6;\n args.modifiers.other.push({label: this.effect.name, value: 6})\n}","4Q3Mp04O2sMgKv9x":"return !args.title.includes(\"Spellbreaking\")","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\nif (smoothing)\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4iu3CmOI19soOYuA":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : 0,\n \"int\" : -200,\n \"wp\" : -200,\n \"fel\" : -200\n}\nlet traits = [ {name:\"Armure\", value: 2}, {name:\"Fabriqué\"}, {name:\"Vision dans l'obscurité\"}, {name:\"Peur\", value: 2}, {name:\"Insensible à la douleur\"},{name:\"Mort-vivant\"},{name:\"Instable\"} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nupdateObj.system.characteristics.int.initial = 0;\nupdateObj.system.characteristics.wp.initial = 0;\nupdateObj.system.characteristics.fel.initial = 0;\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n {\n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n if (trait.disabled)\n {\n t.system.disabled = true;\n }\n items.push(t);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trait.name}`, {permanent : true})\n }\n}\n\n\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","4jLe2XZQVUB8LztP":"args.fields.slBonus += this.effect.getFlag(\"wfrp4e\", \"slBonus\") || 0;","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"bleeding\");\n}\n","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\nawait args.actor.addCondition(\"entangled\")","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \n this.effect.delete();","4ylzjgUdHY5D0yVh":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Langue (Bataille)\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [15, 15, 15, 15, 10, 15, 10, 10]\n\nlet talents = [\"Vigilance\", \"Maîtrise du combat\", \"Combat Instinctif\", \"Inspiring\", \"Déterminé\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = []\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"}))\n\nlet ride = await foundry.applications.api.DialogV2.confirm({title : \"Compétence\", content : \"Ajouter Chaos Steed et +20 en Monte (Cheval) ?\", window : {title : this.effect.name}})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Monte (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","55eYGvSXetDMK80S":"const diseaseIds = this.actor.items.filter(i => i.type == \"disease\").map(i => i.id)\nthis.actor.deleteEmbeddedDocuments(\"Item\", diseaseIds)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\nlet damage = args.totalWoundLoss;\nlet tb = sourceActor.system.characteristics.t.bonus\nargs.abort = `${this.effect.name}: Dégâts appliqués à ${sourceActor.name}`;\n\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\n\nthis.script.message(message.replace(`${tb} TB`, `${tb} × 2 TB`))\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\n this.script.message(`1 Point de Chance volé à ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n}","5GHQxfxlmjyt1fNq":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\")\nlet ids = await this.actor.createEmbeddedDocuments(\"Item\", [item1, item2], {fromEffect : this.effect.id})\nthis.actor.updateEmbeddedDocuments('Item', [ {_id: ids[0].id, 'system.specification.value': 16} ] )","5GP9UJMvBZv6kWtI":"this.script.message(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n\n\nlet msg = ``\nlet weapons = args.actor.itemTypes.weapon.filter(i => !i.system.location.value);\nlet armour = args.actor.itemTags.armour.filter(i => !i.system.location.value);\nfor(let item of weapons)\n{\n\tif (item.system.properties.qualities.shield)\n\t{\n\t\tawait item.system.damageItem(1, \"shield\");\n\t}\n\telse\n\t{\n\t\tawait item.system.damageItem(1);\n\t}\n\tmsg += `

${item.name} endommagé de 1

`\n}\nfor(let item of armour)\n{\n\tawait item.system.damageItem(1);\n\tmsg += `

${item.name} endommagé de 1

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JWC0l3JEpOsqbR9":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 0\n}\nlet skills = [\"Esquive\", \"Perception\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Fuite !\", \"Tireur de précision\"]\nlet trappings = [\"Arme simple\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","5JvKJZPcd6Hz5zvn":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 20,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Commandement\"]\nlet skillAdvancements = [15, 15, 10, 5]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Déterminé\"]\nlet trappings = [\"Cotte de Mailles\", \"Chausses de Mailles\", \"Coiffe de Mailles\", \"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = this.effect.name + \" \" + updateObj.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","5KIozV7HxyGvskeD":"args.data.reversal = {allowed : true, if: \"worse\"};","5KVslRqhqzuFLyk4":"if (!this.actor.has(\"Béni (Taal)\", \"talent\")) return;\n\nthis.actor.system.characteristics.wp.modifier += 15;","5LdJCKfQem1AQK24":"\nif (!args.flags.howlingWarpGale)\n{\n args.fields.modifier -= 10;\n args.flags.howlingWarpGale = true; // prevent double application\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += ` (Suivants de Tzeentch)`;\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\nanimosity.system.specification.value = \"Suivants de Nurgle\";\n\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll({allowInteractive : false});\n\nroll.toMessage(this.script.getChatData());\n\nlet mutations = [];\nlet msg = `

Mutations Acquises

`\nfor(let i = 0; i < roll.total; i++)\n{\n let item;\n let uuid;\n let result;\n if (i % 2 == 0)\n {\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\n }\n else\n {\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\n }\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n item = await fromUuid(uuid);\n if (item)\n {\n msg += `

@UUID[${uuid}]{${item.name}}

`\n mutations.push(item.toObject());\n }\n}\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\nthis.script.message(msg);","5MxRDXzUBPfp2KKD":"args.context.useOnesSupportive = true;","5ScjIdRUOxblHdWS":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","5XAYjiq1i4M7Ky7j":"const trait = this.actor.itemTags.trait.find(t => t.name === \"Régénération\");\nconst name = \"Régénération Pourrie\";\n\nif (!trait) return;\n\nconst effect = trait.effects.find(e => e.name === \"Régénération\");\nconst scriptData = effect.system.scriptData;\n\nscriptData[0].script = `\n let chatData = {whisper: ChatMessage.getWhisperRecipients(\"GM\")};\n let message = \"\";\n\n let Blessures = foundry.utils.duplicate(this.actor.status.Blessures);\n let regenRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\n let regen = regenRoll.total;\n\n if (Blessures.value >= Blessures.max)\n return;\n\n if (Blessures.value > 0) {\n Blessures.value += Math.floor(regen / 2);\n if (Blessures.value > Blessures.max) {\n Blessures.value = Blessures.max;\n }\n message += \\`\\${this.actor.name} regagne \\${regen} Blessures.\\`;\n\n if (regen === 10) {\n message += \"
De plus, il régénère une Blessure Critique.\";\n }\n } else if (regen >= 8) {\n message += \\`\\${this.actor.name} a obtenu un \\${regen} et regagne 1 Blessure.\\`;\n Blessures.value += 1;\n if (regen === 10) {\n message += \"
De plus, il régénère une Blessure Critique.\";\n }\n } else {\n message += \\`\\${this.actor.name} Résultat de régénération de \\${regen} - Aucun effet.\\`;\n }\n\n await this.actor.update({\"system.status.wounds\": Blessures});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(\"GM\")});\n`\n\nawait effet.update({\n name,\n \"system.scriptData\": scriptData\n});\n\nawait trait.update({name});","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\n\nif (!visor)\n args.fields.modifier -= 10;\nelse\n args.fields.modifier -= 20;","5dR7Erj3nwsxLAV7":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Feinte\", \"Inspiring\", \"Chanceux\", \"Déterminé\", \"Inébranlable\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","5gPAT5Bb2FvQwYNQ":"args.test.preData.reversal = {allowed : true, if: \"better\"};\nthis.effect.delete();","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\n{\n args.fields.successBonus += 1\n}\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\n{\n args.fields.modifier -= 10;\n}","5lpR78CLhYH6Mjnu":"if (this.actor.has(\"Arboricole\",\"trait\")) return\n\nthis.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.rOV2s6PQBBrhpMOv\", this.effect)","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\n\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\nlet selectedCrew = [];\n\nwhile (selectedCrew.length < rating && crewList.length) {\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\n} \n\nfor (let member of selectedCrew) {\n let actor = game.actors.get(member.id);\n actor.applyBasicDamage(9, {\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \n minimumOne: true, \n loc: \"roll\", \n suppressMsg: false, \n hideDSN: false \n });\n}","5uokSqQsjgMapnCi":"if (\n this.item == args.defenderTest.item\n && args.defenderTest.succeeded\n && args.defenderTest.item?.system?.attackType == 'melee'\n && (args.attackerTest.item.properties.qualities?.magical || args.attackerTest.item.properties.unusedQualities?.magical)\n)\n{\n args.opposedTest.result.other.push(`${this.effect.name}: détruit magique ${args.attackerTest.item.name}.`)\n}","5z5nGwZC5RIwokev":"this.script.message(await this.actor.applyBasicDamage(12, {suppressMsg: true, loc: \"roll\"}))","6136BMmiGLwZ16H1":"return !!args.skill","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\n{\n this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\n}","64aJznxPMUHAuf7F":"if (this.item.flags.runeOfLuck || this.actor.type != \"character\") return\n\nconst currentFortune = this.actor.status.fortune.value\nconst runesOfLuck = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst runeFortune = parseInt(runesOfLuck.length)\n\nif (args.equipped) {\n this.item.flags.runeOfLuck = true\n await this.actor.update({\"system.status.fortune.value\" : runeFortune + currentFortune})\n this.script.message(`Points de Chance augmentés de ${currentFortune} à ${runeFortune + currentFortune}.`)\n}\nelse\n{\n this.item.flags.runeOfLuck = true\n await this.actor.update({\"system.status.fortune.value\" : Math.max(0, currentFortune - runeFortune)})\n this.script.message(`Points de Chance réduits à ${Math.max(0, currentFortune - runeFortune)}.`)\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.Test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","6A6ddQDJo23oOWtK":"const SL = this.effect.getFlag(\"wfrp4e\", \"SL\") ?? 0;\n\nargs.fields.slBonus += SL;","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the utilisateur d Creature Trait.\nconst hasColdBlooded = this.actor.has(\"À Sang Froid\")\nif (hasColdBlooded === undefined)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n this.script.message(`

${this.actor.prototypeToken.name} a acquis le Trait de Créature À Sang Froid et peut annuler tout test de Volonté raté.

\n

Si ils gagnent une Condition Surpris, cette Condition n'est pas perdue la première fois qu'elle devrait l'être (ce qui est généralement à la fin du Round ou si la victime est attaquée).

`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n}","6AsCMHZ4IYPq7Uxf":"return args.skill?.name.includes(\"Focalisation\");","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils gagnent +1 point de Corruption si un Test d'exposition échoue, ce qui devra être appliqué manuellement.
S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[modérée]{Corruption Modérée}\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Utilisé)\"})\n this.script.message(`${this.item.name} porté par ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}","6EXkbVTRBhKTEu81":"if (!args.flags.bothEyes)\n{\n\targs.flags.bothEyes = true;\n\targs.fields.modifier -= 30\n}","6Fe8M5MdklKS2olx":"return args.characteristic != \"fel\"","6H6vNjzvMGl2ZqCR":"if (args.totalWoundLoss > 0)\n this.script.message(`Blade of Nurglitch: ${args.actor.name} doit réussir un Test d'Résistance de Difficulté (-10) ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","6HfCvw24X6oEe2vn":"if ([\"t\", \"s\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}","6LMzIdmCSYctgmGx":"const stupid = this.actor.items.find(i => i.name === \"Stupidee\");\n\nif (!stupid) return;\n\nawait stupid.update({\"system.disabled\": true});","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\n{\n this.effect.delete();\n}","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6P2QNPKfwQ1xwxZT":"args.fields.slBonus ++","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Régénération')\n\nif (regenerate)\n{\n let effect = regenerate.effects.contents[0]\n let scriptData = effect.system.scriptData;\n \n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\n}","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"ablaze\")","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez le Savoir d'Incantation\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.magicLores));\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6elUNF58TaiYjxcx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"GAin d'1 état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"stunned\");\n}","6frithfMs7Nbv0IZ":"args.fields.slBonus += this.effect.sourceActor.system.characteristics.fel.bonus;","6gRixT3zIOAberJb":"const disease = await fromUuid(\"Compendium.wfrp4e-soc.items.Item.8Q9JYtR1y3B5J6UH\");\nconst data = disease.toObject();\ndata.system.incubation.value = 0;\ndata.system.duration.active = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","6hAgggYpNR3r4QWC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0\")\nitem = item.toObject()\nlet species = args.actor.Species || \" de votre espèce\"\nitem.name = `Animosité (tous sauf ${species})`\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","6jcTzK1XEuWqAacN":"args.abort = true;\nthis.script.notification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag(\"wfrp4e\", \"location\")]}!`, \"error\")","6jp8slPU33oBQe1V":"return args.context.crewTest?.system.handling !== true;","6kifXp2jXEaQVJsg":"let useWard = await foundry.applications.api.DialogV2.confirm({\n\tcontent : `

Utiliser la Protection fournie par ${this.effect.name}?`,\n\twindow : {\n\t\ttitle : this.effect.name,\n\t}\n})\n\nif (useWard)\n\targs.ward = 9;","6maNAmREdataXmo4":"if (this.actor.system.status?.ward?.value) {\n this.actor.system.status.ward.value = Math.max(7, this.actor.system.status.ward.value-1);\n} else {\n this.actor.system.status.ward.value = 9;\n}","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.notification(\"Avantage retiré\")\n}\nelse\n{\n return this.script.notification(\"Pas assez d'Avantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","6nA5LPXneAahHX2W":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tlet sourceActor = this.effect.sourceActor;\n\tthis.script.message(await this.actor.applyBasicDamage(4 + sourceActor.system.characteristics.s.bonus, {suppressMsg : true}))\n}","6oSs8qKFNFz2lSmh":"if (args.actor.system.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value = 0;\n","6qJP0hpShEM43ohx":"const actor = args.actor;\n\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Océans)\")) {\n const loreTest = await actor.setupSkill('Savoir (Océans)', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'hard'},\n characteristic: 'int',\n });\n await loreTest.roll();\n\n if (loreTest.succeeded) {\n loreTest.result.other.push(`${actor.name} reconnaît l'attrait du Léviathan.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait Test.roll();\n\nif (!Test.succeeded) {\n Test.result.other.push(`${actor.name} est devenu @Condition[Stunned] par la vue.`);\n test.renderRollCard();\n actor.addCondition(\"stunned\");\n}","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nitem = item.toObject()\n\nitem.system.specification.value = 10;\nitem.name += \" (Fire)\"\nfoundry.utils.setProperty(item, \"flags.wfrp4e.breath\", \"fire\")\n\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6xTtJEhRc4OjcDTf":"if (foundry.utils.getProperty(args.data, \"system.status.fortune.value\"))\n{\n\tthis.script.scriptNotification(\"Impossible de mettre à jour la Chance\");\n\tdelete args.data.system.status.wounds.value;\n}","713v1T8HNste94pr":"args.context.grudge = true;","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\n{\n ValueDialog.create({text : \"Entrez les Blessures Perdues pour gagner des DR\", title : this.effect.name}, \"0\").then(async value => {\n value = Math.clamp(value, 0, 3)\n if (value == 0)\n {\n return;\n }\n else if (Number.isNumeric(value))\n {\n this.script.notification(`Lost ${value} Wounds`)\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.Test.addSL(value);\n args.Test.preData.other.push(`${this.effect.name}: +${value} SL`)\n }\n })\n}","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\n\nif (args.equipped)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption Modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}","7OmrMjaU48o2FEZi":"\nthis.actor.characteristics.t.bonus = 10\n\nthis.actor.details.move.value = 0;\nthis.actor.details.move.walk= 0;\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7T3iXgrL72fea67C":"const bloodyFluxUUID = \"Compendium.wfrp4e-core.items.Item.herUmN51D9TiL2Vn\";\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"easy\"},\n context: {\n success: `Butcher est soigné.`,\n failure: `Butcher contracte @UUID[${bloodyFluxUUID}].`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n await this.actor.addEffectItems(bloodyFluxUUID, this.effet);\n} else {\n const SL = Test.result.SL;\n const heal = 1 + SL;\n await this.actor.modifyWounds(heal);\n this.script.message(`Butcher a soigné ${heal} Blessures.`);\n}","7UUS0gX2Pbi0HHiz":"return args.skill?.name !== game.i18n.localize(\"NAME.Swim\");","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.notification(`SSuppression de ${poisoned.conditionValue} états Empoisonnés`)\n poisoned.delete();\n}\nelse\n this.script.notification(`Aucun état Empoisonné à supprimer.`)","7ZoFUMDG2WJd8RMg":"this.script.message(`Bonus utilisé : ${this.effect.name}`);","7ateEtT5HXg1vObY":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\") && !args.flags.infighter) \n{\n args.fields.modifier += 10;\n args.flags.infighter = true;\n}\n\nargs.fields.successBonus += 1; ","7n3SEAGRA5ESK8gV":"args.context.disarm = true;","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\nlet match = result.description.match(/b>([^<]+)/i);\nlet key = match[1];\nlet roll = new Roll(\"5d10\");\nlet value = undefined;\n\nawait this.script.message(result.description, {flavor: result.title});\n\nswitch (key) {\n case 'Triopmhe de Stromfels!':\n value = 0;\n break;\n case 'Stromfels monte!':\n await roll.evaluate();\n if (this.actor.system.status.mood.value > 0)\n value = -roll.total;\n else if (this.actor.system.status.mood.value < 0)\n value = roll.total;\n break;\n case 'Aucun effet.':\n break;\n case 'Manann est provoqué!':\n await roll.evaluate();\n value = -roll.total;\n break;\n}\n\nif (roll._evaluated)\n await roll.toMessage();\n\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the utilisateur d Creature Trait.\nconst hasutilisateur d = this.actor.has(\"Insensible à la douleur\");\nif (hasutilisateur d === undefined)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n this.script.message(\n `

${this.actor.prototypeToken.name} a acquis le Trait de Créature Insensible à la douleur. Cet\n effet dure une heure, après quoi il se dissipe et l'effet complet\n de toutes les blessures du buveur s'abat d'un coup.

\n

Notez que cela n'empêche pas l'utilisateur d'acquérir une Blessure Critique\n ou d'en mourir. Cela leur permet simplement d'ignorer la plupart\n de leurs effets.

`,\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\n}","7y89OcMmGbjRMgTg":"return !this.item.equipped.value \n || !args?.skill\n || !([game.i18n.localize(\"NAME.Charm\"), \n game.i18n.localize(\"NAME.Intimidate\"), \n game.i18n.localize(\"NAME.Leadership\")].includes(args.skill.name))","873KaarAnJ2qf1r2":"args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 1})","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8BCzpjFU0GeA17Wp":"args.fields.modifier +=20;","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\nlet types = {\n none : \"None\",\n cold : \"Froid\",\n corrosion : \"Corrosion\",\n fire : \"Feu\",\n electricity : \"Électricité\",\n poison : \"Poison\",\n smoke : \"Fumée\",\n various : \"Divers\"\n}\nif (!type)\n{\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choisir Souffle\"))[0]?.id;\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\n}\n\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\n{\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\n}","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n\targs.fields.modifier -= 10;\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8R7O63iC0yANtkJ9":"if (this.item.equipped.value && this.actor.hasCondition(\"ablaze\"))\n{\n await this.actor.removeCondition(\"ablaze\")\n this.script.notification(`Ne peut recevoir un état En Flammes`,\"info\");\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8TRiAJ8thIKE4IoL":"\nlet SL = Number(foundry.utils.getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\n\nargs.actor.characteristics.i.modifier += 10 * SL\nargs.actor.characteristics.ag.modifier += 10 * SL","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\n{\n args.actor.addCondition(\"ablaze\")\n}","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Range)\n if (Number.isNumeric(range))\n {\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\n }\n}","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\n\nif (APIgnored)\n{\n args.modifiers.ap.ignored += APIgnored\n args.modifiers.ap.details.push(`${this.effect.name}: Ignore les PA avec des points faibles (${APIgnored})`)\n}","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\nargs.item.system.qualities.value.push({name : \"impact\"})\n","8pbVGsVFlDebu2Ac":"args.wounds += 2;","8qOGotfGFA0HYQ6W":"let resistances = this.actor.itemTags.talent.filter(i => i.name == game.i18n.localize(\"NAME.MagicResistanceTalent\"));\n\nfor(let talent of resistances)\n{\n talent.system.max.value = \"custom\";\n talent.system.max.formula = \"@characteristics.t.bonus + 2\"\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\nif (caster)\n{\n let healed= caster.characteristics.wp.bonus\n this.actor.modifyWounds(healed);\n this.script.message(`${this.actor.prototypeToken.name} regagne ${healed} Blessures`)\n}","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\n\nif (weakpointsAP > 0)\n{\n args.modifiers.ap.ignored += weakpointsAP;\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore les points faibles (${weakpointsAP})`);\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\nitem.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8xqYrBIf1Zhlwizg":"const repaired_message = `

Ancre terminée.

`;\nconst test = 'Strength';\nconst difficulty = 'vhard';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n test: {\n value: test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\nthis.actor.characteristics.int.value= \"-\"\nthis.actor.characteristics.wp.value= \"-\"\nthis.actor.characteristics.fel.value = \"-\"","8zTkDVziBPaNbMQX":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 6, {text : \"Choisissez 6 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 9, {text : \"Choisissez 9 Sorts d'Arcane\"})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\nthis.actor.characteristics.s.calculationBonusModifier -= 1","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.failed && args.test.characteristicKey == \"wp\")\n{\n this.actor.addCondition(\"broken\")\n}","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\nawait this.script.message(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\n let data = item.toObject();\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\n data.system.description.value += \"

Ce talent s'applique à tout objet métallique en raison de Affinité Métallique

\"\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n})","9AMoFRATTAfdKlKN":"const test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain de 1 état @Condition[Poisoned].`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n args.actor.addCondition(\"poisoned\");\n const speaker = ChatMessage.getSpeaker({actor: args.actor});\n this.script.message(`

${speaker.alias} a reçu 1 état @Condition[Poisoned] de Venin d'Araignée.

Les victimes réduites à 0 blessures et qui souffrent d'un état @Condition[Poisoned] de ces flèches deviennent @Condition[Unconcious], mais ne risquent pas la mort à cause des états @Condition[Poisoned] restants comme ce serait normalement le cas.

`);\n}","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\nargs.actor.system.details.price.gc *= 1.1;","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.name += ` (En charge)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\n\tthis.script.notification(\"Effets secondaires appliqués\");\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.name += \" (No AP)\"\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\n","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9eL5JbQQmCY030ba":"this.actor.addCondition(\"poisoned\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","9fNHye2N2DORR0A3":"return !args.item.name.includes(\"Arme\")","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\n{\n this.script.message(`Gain de ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (args.Test.Échoué && this.actor.type == \"character\")\n {\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\n }\n}","A1odAcuRbq9797ZB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Mêlée (Base)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Mêlée (arme d'hast)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {\n title : \"Choix\"\n },\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mêlée (Base)
  2. \n
  3. Mêlée (arme d'hast)
  4. \n
\n `,\n buttons : [\n {\n label : \"Base\",\n callback : () => {\n return choice1;\n }\n },\n {\n label : \"Arme d'hast\",\n callback : () => {\n return choice2;\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","A3MW0UksYrHGa0Qw":"return [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic);","A3XrFB7SvV2vcg1a":"if (args.applyAP) \n{\n args.applyAP = false;\n}","A6DcKPzAGntzSCil":"let roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","ACtDCTLZXmd5uXjX":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Diviser les dégâts par deux ? (Divise tous les dégâts sauf le feu, le froid et la magie)\"})\n}\nelse\n{\n halve = false;\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par deux\", value : \"× 0.5\"})\n}","AFiB20FaOBmBv2Kz":"if (args.actorsystem.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value = Math.floor(args.actor.system.details.move.sail.value * .5);\n","AGD7zCyV4zruvnWu":"return args.type != \"cast\" || ![\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","AI6bFrjWk4NH9FBd":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","AI7iVbQMPzXMP5on":"const hours = new Roll(\"2d10\");\nawait hours.toMessage({flavor: this.effect.name + \" (heures)\"});\n\nconst bonus = new Roll(\"2d10\");\nawait bonus.toMessage({flavor: this.effect.name + \" (heures)\"});\n\n\nawait this.effect.update({\n \"duration.seconds\": hours.total * 3600\n});\nawait this.effect.setFlag(\"wfrp4e-tribes\", \"bonus\", bonus.total);","AMI2wDJqsIZsoq1e":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.message(`Emits a cloud of foul-smelling blackpowder. Enable the Fellowship Penalty Active Effect on @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","AS7CstSosuCrwZ19":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","AVROqafFhKjN6TPR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","AWgZnm9xLyIWCDnp":"let robust = args.modifiers.other.find(i => i.key == \"robust\")\nif (robust)\n{\n\trobust.value--;\n}\nelse \n{\n\targs.modifiers.other.push({key: \"robust\", label : this.effect.name, value : -1})\n}\n","AYEiCx2Es3QtMY28":"let choice1 = [\n {\n type: \"trait\",\n name: \"Bestial\",\n },\n {\n type: \"trait\",\n name: \"Regeneration\",\n },\n {\n type: \"trait\",\n name: \"Taille (Large)\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n console.log(\"WISH LIST2\", choice1, items);\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\n\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","AZGXrZOQ4EzjxRL9":"return true;","AaPPmnv7AtxsRVUs":"args.actor.details.move.value = 1;","Adgs6Zs0FdefO6qx":"if (args.test.options.pilot && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: SL limited to 1`)\n}","Ah2wyywkL8hjJNXM":"args.context.healWounds = true;","AjC4dsiuhVCOnRGI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","AmOMCUaWLJ2iJAt5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IFKWu98qmWpaSfUi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","AmpDbT0BkDHeaRzf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\");\nlet data = item.toObject();\ndata.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ApaLcUhuty3EzJoP":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","AqHLHp4kH6KULk3e":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.system.sourceData.item = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","AvRbjpBfTX3mn3bz":"if (this.actor.effects.contents.filter(e => e.name === \"Liquid Fortification\").length === 0) {\n let effectData = this.item.effects.contents[0].convertToApplied();\n effectData.duration.seconds = 3600\n this.actor.applyEffect({effectData : [effectData]});\n this.script.notification(\"Durée de l'effet Liquid Fortification réglée à 1 heure.\");\n}\nelse {\n let effect = this.actor.effects.contents.filter(e => e.name === \"Liquid Fortification\")[0];\n effect.update({duration: {seconds: 3600}});\n this.script.notification(\"Durée de l'effet Liquid Fortification réinitialisée à 1 heure.\");\n}","AyNb5sj6FD2Z3Q5T":"this.actor.addCondition(\"dead\")\nthis.actor.setWounds(0);\nthis.script.message(await game.wfrp4e.tables.formatChatRoll(\"scatter\"))","AyS3iLljxHRKsHg4":"let broken = this.actor.hasCondition(\"broken\");\nlet fatigued = this.actor.hasCondition(\"fatigued\");\nawait broken?.delete();\nawait fatigued?.delete()\nlet drilled = await fromUuid(\"Compendium.wfrp4e-core.items.Item.J9MK0AIaTbvd5oF6\")\nlet fearless = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet stout = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IogM5gnsoOX63w7j\")\nthis.actor.createEmbeddedDocuments(\"Item\", [drilled, fearless, stout], {fromEffect : this.effect.id})","B063u4vrbvzMaCQt":"args.item.system.flaws.value = args.item.system.flaws.value.concat([{name : \"bulky\"}, {name : \"unreliable\"}])","B1xgRS00RcTIZLnO":"return [\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\")","B87v1twc65qyvUWi":"args.fields.modifier += 10 * this.effect.conditionValue","BD7bVTU2pVoRSRBe":"let symptoms = {\n convulsions : \"Convulsions\",\n coughsandsneezes : \"Toux et Éternuements\",\n fever : \"Fièvre\",\n flux : \"FMalaiselux\",\n nausea : \"Nausée\"\n}\n\nlet roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nroll.toMessage(this.script.getChatData());\n\nlet choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, \"Choisir Symptômes\");\n\nif (choices.length)\n{\n let symptomEffects = foundry.utils.duplicate(game.wfrp4e.config.symptomEffects)\n let added = []\n for(let choice of choices)\n {\n let symptom = symptomEffects[choice.id];\n symptom.origin = this.effect.uuid;\n added.push(symptom);\n }\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", added)\n}\nelse\n{\n this.effect.delete();\n}\n","BEEvU2hE5ymcNOH9":"let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Exténué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","BHbFqhJPzZI2txLs":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 2\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","BVNKF9omCppWPLys":"let actor = game.user.character ?? canvas.tokens.controlled[0]?.actor;\nif (!actor || !(actor.system instanceof StandardActorModel))\n return ui.notifications.warn(\"Vous devez contrôler un acteur capable d'effectuer un test de Force\");\n\nlet test = await actor.setupCharacteristic(\"s\", {\n skipTargets: true,\n appendTitle: \" - Évacuation\",\n fields: {\n difficulty: \"challenging\"\n },\n context: {\n success: \"Réduction du niveau de Perforation !\"\n }\n});\n\nawait Test.roll();\nif (Test.succeeded) {\n let SL = parseInt(Test.result.SL);\n let name = this.effect.name.replace(/\\d+/, rating => parseInt(rating) - SL);\n await this.effect.update({name});\n}\n\nlet rating = parseInt(this.effect.name.match(/\\d+/)?.[0]);\nif (rating <= 1) {\n const scriptData = this.effect.system.scriptData\n scriptData[2].trigger = '';\n await this.effect.update({disabled: true, \"system.scriptData\": scriptData});\n}","BY4feKp244bQOWlB":"args.test.result.canDualWield = true;","BZETMpgrI5k1ol5b":"// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage.\nconst surprised = this.actor.hasCondition(\"surprised\")\nconst unconscious = this.actor.hasCondition(\"unconscious\")\nconst entangled = this.actor.hasCondition(\"entangled\")\nif (entangled || unconscious || surprised) return\n\n// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating.\nconst grimRating = parseInt(this.item.specification.value) || 1\nif (grimRating > this.actor.status.advantage.value) {\n this.actor.setAdvantage(grimRating)\n}\n","BcXTujburrHpjpwa":"args.fields.slBonus -= 3;","Be5rdfnZorbILhpC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 3 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Bexspr5viPhHiFmU":"let fatigued = this.actor.hasCondition(\"fatigued\");\nlet value = fatigued?.conditionValue || 0;\nargs.fields.modifier += value * 10;","Bj6bxItlgtI2sXVN":"let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage(this.script.getChatData());\nargs.totalWoundLoss = Math.max(0, args.totalWoundLoss - roll.total)\nargs.modifiers.other.push({label: this.effect.name, value : -1 * roll.total})\nthis.effect.update({disabled : true})","Bu0KUpGvfmFF7LJs":"let test = await this.actor.setupCharacteristic(\"s\", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}});\n\nawait Test.roll();\n\nif (Test.Échoué)\n{\n\n if (Test.isCriticalFumble == \"fumble\")\n {\n\t return this.script.message(`${this.actor.name} meurt alors qu'il est entraîné dans l'Aethyr (à moins qu'il ne dépense un point de Destinée pour éviter cela).`);\n }\n\n await this.script.message(await this.actor.applyBasicDamage(3, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\n\n}","Bv3431tnG3VKaTJr":"if (args.test.result.castOutcome == \"success\")\n{\n args.test.result.other.push(`@Peur[2,${this.actor.name}]`);\n}","ByhEa1BxQOyrOmqg":"return args.item?.attackType == 'melee'","BzDLuxBNw1QNIacg":"if (args.item.type == \"skill\")\n args.item.system.advances.value = 0\n\nif (args.item.type == \"talent\")\n args.item.system.tests.value = \"\"\n\nif (args.item.type == \"weapon\") \n args.item.system.qualities.value = []","C5NIkJwXL85Qbpe7":"args.weaponProperties.impale = true;","C69xngEMghfwUx13":"let easier = ['challenging', 'average', 'easy', 'veasy'];\nif (easier.includes(args.fields.difficulty))\n args.fields.difficulty = \"difficult\";","CCwuu3bPLCpVGAmb":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\n","CD4RnDpXZ9hnqVPQ":"if (!this.actor.hasCondition(\"entangled\"))\n this.actor.addCondition(\"entangled\");","CDASLC4fWKSGQKf9":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded?.getFlag(\"wfrp4e\", \"flockOfDoom\"))\n{\n blinded.delete();\n}","CHnaBPHk6HdFS512":"let arm = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\");\nlet leg = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\");\n\nlet choice = await ItemDialog.create([arm, leg], 1, \"Choisir le membre\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})","CIxZYkHggBQ6EsHP":"this.script.notification(\"Effet utilisé\");\nthis.effect.delete();","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\n\nlet lostFingers = this.actor.flags.useless[key] || 0;\n\nlostFingers += 1\n\nthis.actor.flags.useless[key] = lostFingers;\n\nif (lostFingers >= 4)\n{\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\n{\n if (effect.isCondition)\n {\n effect.delete();\n }\n}","CS6O7UUjQcUJoOUP":"if (args.test.failed)\n {\n let SL = Number(args.test.result.SL)\n if (SL <= -2 && SL > -4)\n this.actor.addCondition(\"stunned\")\n else if (SL <= -4 && SL > -6)\n this.script.message(this.actor.prototypeToken.name + \" Doit réaliser un test a FM être @Condition[Prone].\")\n else if (SL <= -6)\n this.actor.addCondition(\"unconscious\")\n }","CUBpU1imu2eRS06C":"if (args.opposedTest.attackerTest.weapon?.system.properties?.qualities.hack && !args.hackReminder)\n{\n args.hackReminder = true;\n args.opposedTest.result.other.push(`${this.effect.name}: Hack causes ${this.item.Advances} extra damage`)\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\n{\n this.actor.modifyAdvantage(-3);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Moderate Exposure to Corruption}`\n )\n this.script.message(`${this.effect.name}: \n @Corruption[moderate]{Moderate Exposure to Corruption}
\n ${args.actor.prototypeToken.name} must take an \n Corruption (Moderate) Test`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n}","Ca1fXHTA1e2QLx0D":"args.fields.modifier += 50;","CbfUDhUr5R4UnPPq":"if (this.actor && this.actor?.name !== \"Kurgorn Three-eyes\" && !this.actor.hasCondition(\"blinded\") && !args.itemUpdated)\n{\n this.script.notification(`Impossible de supprimer l'état Aveuglé.`);\n await this.actor.addCondition(\"blinded\", 1, {statuses : [\"blinded\", \"blind\"]})\n}","CcR9i3UzUXx7ieep":"args.fields.modifier +=10;","CicQ5REu9tbsc8wW":"const locations = [];\n\nfor (let [key, loc] of Object.entries(args.AP)) {\n if (loc.layers?.some(i => !i.metal && i.source?.system.tags?.has(\"armour\")))\n locations.push(key);\n}\n\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","Cjj4iLkdY1NaZRCi":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Projectiles\")))\n{\n let choice = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : `

Apply damage with ${this.effect.name} to attacker?`})\n\n if (choice)\n {\n this.script.message(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\n }\n}","ClkT2WG2UjVwQ97T":"if (args.actor.has(\"Démoniaque\")) {\n args.totalWoundLoss += 3;\n args.modifiers.other.push({label: this.effect.name, value: 3});\n}\n\nlet test = await args.actor.setupSkill(\"Résistance\", {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n characteristic: 't',\n context: {\n failure: \"Reçoit 1 État Aveuglé\"\n }\n});\nawait test.roll();\n\nif (test.failed) {\n args.actor.addCondition(\"blinded\");\n}","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","Cri5Q7ux6ni7zNVS":"// Cannot be Surprised in combat.\n\nif (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n ui.notifications.notify(`${this.effect.name}: Cannot be surprised`);\n}","CxsKWGwQqtAaQdzX":"return args.characteristic === \"fel\";","CynUM4ZEiB9QbNQq":"const bonus = game.settings.get(\"wfrp4e\", \"homebrew\").advantageBonus;\n\nargs.fields.modifier += 2 * bonus;","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\n\n","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Métier (Apothicaire)\" || args.skill?.name == \"Trade (Alchemist)\"","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\ntooth = tooth.toObject()\ntooth.system.specification.value = 3\ntooth.system.qualities.value = [{name : \"magical\"}]\n \nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nclaw = claw.toObject()\nclaw.system.specification.value = 4\nclaw.system.qualities.value = [{name : \"magical\"}]\nclaw.name = \"Claw\"\n\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DUFSlDO38fQWclBE":"// Characters wounded by the ravens gain the ability to read, understand and speak rudimentary Classical. \n// This ability does not last beyond this adventure.\n\nthis.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.61L9aX2z164cjm7K\", this.effect)\n\nthis.script.message(`${args.actor.name} gains the ability to read, understand and speak rudimentary @UUID[Compendium.wfrp4e-core.items.Item.61L9aX2z164cjm7K]{Classical}. This ability does not last beyond this adventure.`)","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \n{\n\tlet roll = await new Roll(\"1d10\").roll()\n\tawait roll.toMessage(this.script.getChatData());\n\tif (roll.total == 9 || roll.total == 10)\n\t{\n\t this.script.message(`${this.actor.name} attached to ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} gorges and falls off.`)\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \n\t}\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\n\nthis.item.updateSource({\"system.location.key\" : letter + \"Doigt\"})\n\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\nthis.script.message(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","Dk4VF4UXSMK5SaVP":"this.script.message(\"Activé pour annulé les Échecs critiques / Echecs\")\nthis.effect.update({disabled: true})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create({text : \"Sélectionnez la colonne de lancer pour déterminer la Tête de Bête\", title : \"Sélectionnez une Colonne\"}, \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\n\nif (column)\n{\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\n this.script.message(`${result.title}
${result.result}`);\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n let item = await fromUuid(uuid);\n if (item)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n this.item.delete();\n }\n}","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n fatigued.system.scriptData = fatigued.system.scriptData.filter(s => s.trigger != \"dialog\")\n fatigued.system._scripts = null;\n}","DvJvHsjgkzIfFaks":"if (!args.test.preData.options?.runeOfParrying) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","DxM3NRgQYc7moMPc":"this.actor.reset()","Dy67jQmeGwHwV9NY":"args.fields.modifier -=10;","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\n args.actor.addCondition(\"unconscious\");\n}","E0HHBSdQR3oH8KaL":"if (args.totalWoundLoss > 0) {\n let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\");\n frenzy = frenzy.toObject(); \n frenzy.effects[0].disabled = false;\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect : this.effect.id}); \n this.script.scriptMessage(\"Carnosaur gains Frenzy\");\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\n\nif (this.actor.system.status.advantage.value >= 3)\n{\n this.script.notification(`Ajout de ${frenzy.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\n}\nelse if (this.actor.system.status.advantage.value >= 1)\n{\n let data = hatred.toObject();\n data.system.specification.value = \"Opposants au corps à corps\"\n this.script.notification(`Ajout de ${hatred.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\n{\n blinded.delete()\n}","E33J9JixYVGxaktQ":"if (this.effect.getFlag(\"wfrp4e\", \"fistsOfGork\") && args.item.type == \"skill\" && args.item.name == \"Corps à corps (Bagarre)\") {\n\targs.item.system.modifier.value += this.effect.getFlag(\"wfrp4e\", \"fistsOfGork\")\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n fatigued.delete();\n this.script.notification(\"Retiré Exténué\")\n}","E6v4YZrvFikbdXoO":"const locations = [];\n\nfor (let [key, loc] of Object.entries(args.AP)) {\n if (loc.layers?.some(i => i.metal))\n locations.push(key);\n}\n\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7ksDLhihkJN4Vpt":"return args.characteristic != \"s\" || args.type != \"characteristic\"","EBNrA6FNX4d05EUx":"return !args.context.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\n\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Voies fluviales)\")) {\n const loreTest = await actor.setupSkill('Savoir (Voies fluviales)', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'hard'},\n characteristic: 'int',\n });\n await loreTest.roll();\n\n if (loreTest.succeeded) {\n loreTest.result.other.push(`${actor.name} reconnaît les leurres des Lurkerfish.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait Test.roll();\n\nif (!Test.succeeded) {\n Test.result.other.push(`${actor.name} est devenu fasciné par la vue et incapable d'effectuer une quelconque action autre que de se déplacer vers la lumière.`);\n Test.renderRollCard();\n actor.addCondition(\"unconscious\");\n}","ECUIJLcKt2TCSFS3":"return !args.weapon?.system?.attackType || game.settings.get(\"wfrp4e\", \"useGroupAdvantage\")","EHfOyVwYhFGWNjw1":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"difficult\"})\n await test.roll();\n if (!test.succeeded)\n {\n await this.actor.addCondition(\"poisoned\");\n }","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.Test.Échoué && args.Test.result.SL <= -3)\n{\n this.script.notification(\"Ajout de A Terre\");\n this.actor.addCondition(\"prone\")\n}","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\nlet data = item.toObject();\ndata.name += \" (Au choix)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\nthis.script.message(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`)\n\nthis.actor.hasCondition(\"bleeding\")?.delete()\nthis.actor.hasCondition(\"fatigued\")?.delete()\n","ERxrWzSpw8qwxFVi":"this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`); this.actor.addCondition(\"broken\");","ETfmit2Cx0Py77ai":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -25,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : -200,\n \"wp\" : -200,\n \"fel\" : -200\n}\nlet traits = [ {name:\"Fabriqué\"}, {name:\"Vision dans l'obscurité\"}, {name:\"Peur\", value: 2}, {name:\"Insensible à la douleur\"},{name:\"Mort-vivant\"},{name:\"Instable\"} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nupdateObj.system.characteristics.int.initial = 0;\nupdateObj.system.characteristics.wp.initial = 0;\nupdateObj.system.characteristics.fel.initial = 0;\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n { \n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n items.push(t);\n }\n else \n {\n ui.notifications.warn(`: -200\n}\nlet traits = [ {name:`, {permanent : true})\n }\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n","ETrfkHI0B9YjJqM2":"return this.item.equipped.value && this.actor.isOpposing && this.actor.attacker.test.item.attackType == \"melee\"","EXiqepAIXmbqMiKa":"if (args.opposedTest?.attackerTest?.weapon?.name.toLowerCase().includes(\"unarmed\")) {\n const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\n args.totalWoundLoss += sl;\n args.modifiers.other.push({label: this.effect.name, value: sl});\n}","EYny6z5oTOhxGDfb":"args.fields.modifier -= 10;\n","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\")\n}","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\nif (Test.succeeded)\n{\n this.script.message(\"Peut réaliser une Action ou un Déplacement (choisissez-en un)\")\n}\nelse\n{\n this.script.message(\"Ne peut pas réaliser une Action ou un Déplacement ce tour-ci\")\n}","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","ElHBPMMx37SZMvOC":"this.actor.addCondition(\"ablaze\");\nthis.script.scriptMessage(`${this.actor.name} has a received a @Condition[Ablaze]`)","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ErgOwSiVnm9VLVHN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","EsZx8cY34quYG4MQ":"let runes = this.actor.itemTypes[\"wfrp4e-dwarfs.rune\"]\nif (runes.length === 0) return ui.notifications.error(\"Cet acteur ne connaît aucune rune.\")\n\nlet rune = await ItemDialog.create(this.actor.itemTypes[\"wfrp4e-dwarfs.rune\"], 1, {text: \"Sélectionnez une Rune\", title: this.effect.name})\nrune[0].system.use({initialTooltip: \"Bonus Enclume de la Destinée\", fields: {modifier: 20}})","Et4tPHlrkueLqP3T":"if (args.item.type == \"skill\") args.item.system.modifier.value -= 10","EwD053Fyy46b59ZI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.6l3jvIAvrKxt0lA9\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eye6dranWpNsILjm":"if (this.actor.system.status.wounds.value <= 1)\n{\n this.effect.delete();\n}","F2u4L4o0r1LTWeWK":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la valeur de Terreur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","F4aGsdzJ9SYcX57F":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.HpFkVJ2lYPAWumUL\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","F7BHb4a7fqWMnYxH":"args.test.data.result.other.push(`You may not use Fortune Points because of ${this.effect.name}`);","F7E0Dr3sT7kkc2p7":"return this.actor.hasCondition(\"fatigued\")","F8Bmh6w01YvKsBIO":"for (const weapon of args.actor.itemTags.weapon) {\n weapon.system.qualities.value.push(\n {name: \"impale\", value: null},\n {name: \"penetrating\", value: null},\n );\n}","F9P8Nh4AKnqSGg8C":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.bxbTiLzbaz4vdukT\", // Hunter's Eye\n \"Compendium.wfrp4e-core.items.Item.XSb3QVB9ipPBFt56\", // Shadow\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","FAB12eLcSCAOOQwk":"this.script.scirptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true});","FAf4iXj5LkdvukS2":"fromUuid(\"Compendium.wfrp4e-wom.items.0Xdm4r7l2EwC4fcg\").then(item => Item.create(item.toObject(), {fromEffect : this.effect.id, parent : this.actor}))","FGIHAkNdYXbTnewG":"if (!game.settings.get(\"wfrp4e\", \"useGroupAdvantage\"))\n return;\n\n\nawait this.actor.modifyAdvantage(1);\nthis.effect.delete();","FKEH7DeqU0FH4dkk":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\n\nif (Test.Échoué) {\n \tthis.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));\n this.script.scriptMessage(`${this.actor.name} est victime de @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}`);\n}","FMA16PvoObBV8vDl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nitem = item.toObject()\nitem.system.specification.value = 20\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\nthis.script.notification(item.name + \" added\")","FMSN5uRskkATexzB":"game.wfrp4e.tables.rollToChat(\"crithead\")","FPQp6XfbUH1BMafj":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {fields : {difficulty : \"vhard\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"prone\");\n this.script.scriptMessage(\"Impossible de se déplacer ou d'agir ce tour\");\n}","FPYNcxm21678boLT":"if (args.attackerTest.data.preData.rollClass !== \"CharacteristicTest\") return;\nif (args.attackerTest.data.preData.characteristic !== \"s\") return;\n\nconst SL = args.opposedTest.data.opposeResult.differenceSL;\n\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\nconst target = canvas.scene.tokens.get(targetId);\n\nif (SL > 4) {\n args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été forcé de laisser partir ${target.name}.`);\n return await this.effect.delete();\n}\n\nif (SL > 0) {\n args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été empêché de serrer ${target.name} pendant un tour.`);\n let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns + 1);\n}","FSqUqSByMiztYOQM":"if (args.totalWoundLoss > 0)\n this.script.message(`Infected: ${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.name = this.effect.name;\ndata.type = 'trapping';\ndata.system.trappingType = {value: 'clothingAccessories'};\ndata.system.equipped = {value: true};\n\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\neffectData.disabled = false;\neffectData.system.transferData.equipTransfer = true;\ndata.effects = [effectData];\n\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}","FbfJjYUyp0ArtZMb":"args.fields.modifier += 15","FciJSTq7dZsZIPgl":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FfTqCPxCoxwGDTQs":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","FiD3mvWIBHNNIuO9":"if (args.opposedTest.result.hitloc.value == \"body\")\n{\n if ((await new Roll(\"1d2\").roll()).total == 1)\n {\n args.opposedTest.result.hitloc.value = \"head\"\n this.script.message(`Localisation du coup changé pour la tête`)\n }\n}","FqevMs0ukQ9WuUHl":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (this.item.getFlag(\"wfrp4e\", \"brittle\"))\n{\n ChatMessage.create({content: `${this.item.name} shatters!`})\n this.item.update({name : `${this.item.name} (Shattered)`})\n}","FtZf56VI6Qsspu0D":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","FttdVBQiNssDAARh":"return args.data.targets[0]?.actor?.hasCondition(\"entangled\")","Fu8DTvSgLufcB5mr":"async function rollTable(characteristics, formula, name) {\n const roll = new Roll(formula);\n await roll.toMessage({flavor: name});\n\n const values = roll.dice[0].values;\n\n for (const value of values) {\n let characteristic;\n switch (value) {\n case 1: case 2: characteristic = \"ws\"; break;\n case 3: case 4: characteristic = \"i\"; break;\n case 5: case 6: characteristic = \"int\"; break;\n case 7: case 8: characteristic = \"fel\"; break;\n case 9: case 10: characteristic = \"*\"; break;\n default: continue;\n }\n\n if (characteristics.has(characteristic)) {\n await rollTable(characteristics, \"1d10\", name);\n } else {\n characteristics.add(characteristic);\n }\n }\n}\n\nconst characteristics = new Set();\nawait rollTable(characteristics, \"2d10\", this.effect.name)\n\nif (characteristics.has(\"*\")) {\n characteristics.delete(\"*\");\n const availableChoices = foundry.utils.duplicate(game.wfrp4e.config.characteristics);\n\n for (const ch of characteristics) delete availableChoices[ch];\n\n const result = warhammer.apps.ValueDialog.create({\n text: \"Choisissez une caractéristique\",\n }, \"\", availableChoices);\n\n if (!result) return;\n\n characteristics.add(result);\n}\n\nthis.effect.setFlag(\"wfrp4e\", \"characteristicsToSwap\", Array.from(characteristics));","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Divertissement (Chant)\";","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\nargs.actor.addCondition(\"ablaze\", ablaze)","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[1].convertToApplied();\n\teffectData.system.sourceData.item = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","G9ZPojp8qdjiXKZ5":"if (!args.test.preData.options?.masterslayer) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\n{\n\targs.fields.lostHand = true;\n\targs.fields.modifier += -20;\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\nawait test.roll();\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","GNgMG95jfabBeIwy":"if (!this.item.system.qualities.value.find(i => i.name == \"fast\"))\n{\n this.item.system.qualities.value.push({name : \"fast\"}) \n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\n{\n args.item.system.AP.head = 0;\n}","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.message(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n game.dice3d?.showForRoll(roll);\n this.script.message(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GYhPhHIVrhx4pkgF":"if (args.combat.combatant.actor.uuid === this.effect.sourceItem.parent.uuid) \n{\n this.effect.delete();\n}","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\n{\n let removeRepeater = false\n if(!this.item.system.offhand.value) // main\n {\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\n if (offhandUsed)\n {\n removeRepeater = true;\n }\n }\n else // offhand\n {\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\n if (mainhandUsed)\n {\n removeRepeater = true;\n }\n }\n \n if (removeRepeater)\n {\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\n }\n}","GePFbu5kp2ymGYEQ":"await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\", this.effect);","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjUD5L4h8FXGVgGQ":"args.initiative += \"+30\";","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\n\neffects.splice(effects.length - 1);\n\nif (effects.length == 0)\n{\n return this.script.notification(\"Tous les effets ont été utilisés. Réinitialisez pour les sélectionner à nouveau\")\n}\nlet choice = await ItemDialog.create(effects, 1, \"Choisir un effet à gagner\");\n\nif (choice[0])\n{\n choice[0].update({disabled : true})\n let effect = choice[0].convertToApplied();\n effect.name += ` (${this.effect.name})`\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\n}","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GsAyB5xnK3ASeoah":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'easy';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","Gsilp71BmIyHHce6":"args.context.masterslayer = true","GtfHQA9T1ip463le":"return ![\"ws\", \"bs\"].includes(args.characteristic)","GuSIY4Zqhc68qVEH":"if (!args.messageSent)\n{ \n args.messageSent = true;\n let runes = this.item.effects.contents.filter(i => i.name == this.effect.name);\n this.script.message(`${args.attacker.speaker.alias} reduce Run speed by ${runes.length * 4} yds.`)\n}","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\n\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Sélectionner un Vent\")\n//this.actor.createEmbeddedDocuments(\"Item\", items);\n\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\n\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\nif (bleeding)\n{\n this.script.notification(`Suppression de ${bleeding.conditionValue} états Hémorragique`)\n Saignement.delete();\n}\nelse\n{\n this.script.notification(`Aucun état Hémorragique`)\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\n{\n args.test.options.criminal = true;\n let currentCareer = args.test.actor.system.currentCareer;\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\n if (coin != \"g\") // Don't roll for gold, just use standing value\n {\n dieAmount = dieAmount + \"d10\";\n }\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\n let moneyString = `${moneyEarned}${coin}`\n let transactionString = `${moneyEarned}${term}`\n\n this.script.message(`Gain additionnel de ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\n test.roll();\n})","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\n\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\n\nthis.script.message(`Attaches to ${args.actor.name}`)","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","H8jDtK1Ewn4hL3A1":"args.fields.slBonus += 4;","HG2fKOfruT5QV3A4":"let lore = await ValueDialog.create({text : \"Choisissez un Savoir\", title : \"Savoir\"}, \"\", {\"fire\" : \"Fire\", \"death\" : \"Death\", \"metal\" : \"Metal\", \"shadow\" : \"Discret\"});\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 3, {text: \"Choisissez 3 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"\"]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 6, {text: \"Choisissez 6 Sorts d'Arcane\"})\n\nlet items = petty.map(i => i.toObject()).concat(arcane.map(i => {\n let spell = i.toObject();\n spell.img = `modules/wfrp4e-core/icons/spells/${lore}.png`\n spell.system.lore.value = lore;\n return spell;\n}));\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([warhammer.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), warhammer.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une Compétence\")\n\n items = items.map(i => i.toObject())\n items.forEach(i => i.system.advances.value = 20)\n\nitems.forEach(i => i.system.equipped.value = true)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","HOt2hHOiHDZ7oBgW":"if ([\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n{\n\targs.actor.details.move.value /= 2\n}\n","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\n{\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\n}","HYrl5aNMm8BAdqH7":"\n let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","HgzIi6m6dkXbVWHp":"if (args.test.skill?.name == \"Calme\")\n{\n args.test.preData.roll = 1;\n args.test.preData.other.push(this.effect.name)\n}","Hi005w1Ul17Q8Uty":"let test = this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n\tthis.effect.delete()\n}","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.notification(\"Etat Hémmoragique appliqué : 2 niveaux de saignement\")\n}","HoNTnPphrJISSQr1":"ChatMessage.create({content : \"Parle et fais toi connaître\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})","Hq1G30lhJYvtOSNb":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.preData.characteristic))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","HrYchgkdZBiu1yPF":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\");","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n this.actor.addCondition(\"bleeding\")","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'incanter un Sort ou d'utiliser un Prière\");\n}\nelse return true;","I2I4ZJjN3EUSow0t":"return args.item?.system?.attackType != \"ranged\"\n || this.item != args.item\n || this.actor.isOpposing","I67tdJctEqXSQPE0":"this.effect.update({\"disabled\": false})","I79D8V8OFzMCtL40":"const target = await ValueDialog.create({title: \"Sélectionnez une Cible\", text: \"Sélectionnez une Cible pour la Haine\"}, \"Target\");\nawait this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\", this.effect, {name: `Hatred (${target})`});","I8JS4z90PtWIG2nb":"return this.actor.hasCondition(\"prone\")","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n this.actor.addSystemEffect(\"convulsions\")\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} reçoit @Symptom[Convulsions] pour [[1d10]] heures`)\n }\n}","IDvpVMkR2HXoNpPp":"return args.skill?.name !== \"Esquive\";","IEDJHIYaZLhmrK4X":"return ![\"weapon\", \"cast\"].includes(args.type) || (!this.item.equipped.value)","IFXsTRAVDUeVvcRc":"let roll = await new Roll(\"1d100\")\nawait roll.evaluate()\nawait roll.toMessage({\"flavor\": `Wyssan's Dice Reversal`})\n\nif (roll.result % 11 === 0 || roll.result === 100) {\n await this.item.setFlag(\"world\", \"inert\", true)\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\n return\n\nlet reach = args.item.reach.value\nlet reachNum = game.wfrp4e.config.reachNum[reach]\nreachNum = Math.min(reachNum + 2, 7)\n\nlet key = warhammer.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\n\nargs.item.reach.value = key","IM8nRo6Jx2I8RJ0L":"return (args.item?.skillToUse?.name == args.skill?.name)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 2;\n","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IXXrxNSLqXEqtuDU":"if (args.actor.details.move.value > 1) {\n args.actor.details.move.value -= 1 \n}","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyPeur(value, name)\n })\n game.canvas.tokens.setTargets([])\n\n}\nelse \n{\n game.wfrp4e.utility.postPeur(value, name)\n}","IhoCoul5okDx0jBa":"if (args.test.weapon.properties.qualities?.blast) {\n args.test.weapon.properties.qualities.blast.value ++;\n if (args.test.options.shortfuse) {\n args.test.result.other.push (`${this.effect.name}: Blast Rating increased`)\n }\n args.test.options.shortfuse = true\n}","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 1\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkVcIRmmgQjsBUUf":"let roll = await new Roll(\"1d100\")\nawait roll.evaluate()\nawait roll.toMessage({\"flavor\": `Wyssan's Dice Reversal`})\n\nif (roll.result % 11 === 0 || roll.result === 100) {\n await this.item.setFlag(\"world\", \"inert\", true)\n this.script.message(`${this.item.name} loses its magical properties`, {blind: true, whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\nlet data = item.toObject();\ndata.system.specification.value = 3\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\n{\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\n}","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\nif (this.actor.flags.holed.reminded === true) return;\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nthis.script.message(`

${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.

`);\n\nthis.actor.flags.holed.reminded = true;","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\n{\n this.actor.removeCondition(\"broken\")\n this.script.scriptNotification(`Impossible de supprimer l'état Brisé`);\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\n\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\n{\n return;\n}\n\nlet god = await ValueDialog.create({text : \"Choisissez un Dieu\", title : \"Béni\"})\n\nif (god)\n{\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Chargement des Prières\", true, [\"system.type.value\", \"system.god.value\"])\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\n let configBlessings = await Promise.tout((game.wfrp4e.config.godBlessings[god.toLowerCase()] || []).map(fromUuid));\n if (god == \"Foi Antique\")\n {\n blessings = await ItemDialog.create(prayers.filter(i => i.system.type.value == \"blessing\"), 6, {text : \"Sélectionnez 6 Bénédictions\", title : \"Béni\"})\n }\n if (configBlessings.length)\n {\n // Combine blessings defined by config with actual blessing items found that specify this god, avoiding duplicates\n blessings = blessings.concat(\n configBlessings.map(i => {return {uuid : i.uuid, name : i.name}})\n .filter(bls => !(blessings.find(i => i.uuid == bls.uuid)))\n );\n }\n if (blessings.length)\n {\n this.script.scriptNotification(\"Ajout de \" + blessings.map(i => i.name).join(\", \"))\n await this.actor.addEffectItems(blessings.map(i => i.uuid), this.effet)\n }\n else\n {\n this.script.scriptNotification(`Impossible de trouver des Bénédictions associées à ${god}.`)\n }\n if (this.item.name.includes(\"Au choix\"))\n this.item.updateSource({name: this.item.name.replace(\"Au choix\", god)});\n else\n this.item.updateSource({name: this.item.name + ` (${god})`});\n await this.actor.update({\"system.details.god.value\": god})\n}","IurWrdbjsmMtTWuq":"return !this.actor.hasCondition(\"prone\")","IuxMr6SFdJhqFtVD":"this.actor.system.status.corruption.value += 3","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.concat(currentCareer.system.addedSkills).includes(skill);\nlet witchAdded = this.actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\twitchAdded[skill] = true;\n\tcurrentCareer.system.addedSkills.push(skill);\n\tfoundry.utils.setProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\n{\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n wardData = ward.toObject()\n wardData.system.specification.value = \"8\"\n \n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\n mrData = mr.toObject()\n mrData.system.specification.value = 2\n \n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\n}\nelse\n{\n this.effect.deleteCreatedItems()\n}","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","J8k4ahQdZhXDfU1l":"return args.skill?.name == \"Runesmithing\"","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\n\nlet options = {\n appendTitle : \" – \" + this.effect.name,\n skipTargets: true,\n fields: {difficulty: 'average'},\n characteristic: 'wp',\n}\n\nlet Test = await args.actor.setupSkill('Calme', options);\nawait test.roll();\n\nif (!test.succeeded) {\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\n const target = canvas.scene.tokens.get(targetId);\n await this.effect.delete();\n args.extraMessages.push(`${args.actor.name} perd ${args.totalWoundLoss} Points de Blessures lors de l'attaque, ce qui l'a forcé à lâcher ${target.name}.`);\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","JaiC5P6nIgctOacH":"if (args.actor.system.details.species?.value?.toLowerCase() == \"dwarf\")\n{\n args.weaponProperties.flaws.undamaging = true;\n}","JavuFNZ9Pj5elVLc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\nif (blinded)\n{\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\n blinded.system._scripts = null;\n}","JhbZWZhOJ23yOBmG":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'hard';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Lâche ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n this.script.message(`Impossible d'être surpris`);\n}","Jnp5c09sPzDD61EK":"this.script.notification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\n\nreturn true; // No need to show this in the dialog","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","K54XxyNJa5PIWDEH":"args.modifiers.other.push({label : this.effect.name, details : \"Blessures Doublées + 4\", value : args.totalWoundLoss + 4 });\nargs.totalWoundLoss = args.totalWoundLoss * 2 +4;","KD4nCSdSXJVJmk0R":"this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\nawait this.actor.addCondition(\"ablaze\")","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\nlet choice = [];\n\nif (!specification || specification == \"Compétences Entraînées\")\n{\n choice = await ItemDialog.create(ItemDialog.objectToArray({\n broken: \"Broken\",\n drive: \"Conduite d'attelage\",\n entertain: \"Divertissement\",\n fetch: \"Fetch\",\n guard: \"Garde\",\n home: \"Home\",\n magic: \"Magic\",\n mount: \"Mount\",\n war: \"War\"\n }, this.effect.img), \"unlimited\", \"Choisir un Entraînement\");\n}\nelse\n{\n choice = specification.split(\", \").map(i => {\n return {\n id : i.toLowerCase(),\n name : i\n }\n });\n}\n\nif (choice.length)\n{\n let changes = foundry.utils.deepClone(this.effect.changes);\n\n for(let training of choice)\n {\n switch(training.id)\n {\n case \"broken\" :\n let roll = await new Roll(\"2d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData());\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\n\n if (this.actor.type == \"creature\")\n {\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\n if (bestial)\n {\n bestial.update({\"system.disabled\" : true})\n }\n }\n break;\n\n case \"drive\" :\n\n break;\n\n case \"entertain\" :\n\n break;\n\n case \"fetch\" :\n\n break;\n\n case \"guard\" :\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\n foundry.utils.setProperty(args, \"options.keepId\", true);\n break;\n\n case \"home\" :\n\n break;\n\n case \"magic\" :\n\n break;\n\n case \"mount\" :\n\n break;\n\n case \"war\" :\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\n break;\n }\n }\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\nif (!table)\n{\n\tui.notifications.error(\"Impossible de trouver la table des Mutations Mentales\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.notification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse\n{\n ui.notifications.error(\"Impossible de trouver l'objet : \" + uuid)\n}","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n }}));","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += ` (Disease)`;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSGIwJxR0qn10RLX":"this.actor.itemTags.template.find(t => t.name === \"Hungry Troll\").delete();","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\nthis.actor.hasCondition(\"deafened\")?.delete()\nthis.actor.hasCondition(\"unconscious\")?.delete()","KkE8DtsTDYDyk1gN":"args.data.reversal = {allowed : true, if: \"better\"};","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Utilise ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async Test => {\n await Test.roll()\n if (Test.Échoué)\n {\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\n this.script.message(`${this.actor.prototypeToken.name} Perte de ${toughnessLost} Endurance`)\n }\n })\n }","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\n{\n\targs.flags.lostFingers = true;\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KxIRA51YA0rktcSP":"return args.characteristic === \"fel\"","KyswmGj1uG3QS3ng":"args.applyAP = false;","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L41ao2Mw1miE0yri":"let roll = await new Roll(\"15\").roll();\nroll.toMessage(this.script.getChatData());","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","L9pUSX8Z4y2zIAn7":"this.actor.system.characteristics.int.value = 50","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","LLqAT9wEUGMLfDhU":"return !args.item?.system.isProjectiles","LNxKkPI37im0bSjy":"const ablaze = Number(args.opposedTest.result.differenceSL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": \"\n + ablaze + \" @Condition[Ablaze] Conditions\")","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\n{\n this.script.message(`${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n\tlet stuns = Math.max(1, Math.abs(Test.result.SL))\n\tthis.actor.addCondition(\"stunned\", stuns)\n}","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\n\nargs.fields.successBonus += 2 + amount;","Lh3Ccqx3utIu6w0d":"if (!args.ablazeApplied)\n{\n args.ablazeApplied = true;\n await args.actor.addCondition(\"ablaze\");\n}","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \n{\n this.actor.addCondition(\"unconscious\");\n}\nelse \n{\n this.actor.addCondition(\"prone\");\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\n\nif(career)\n{\n career.system.current.value = true;\n}","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\n{\n await args.opposedTest.swap(this.effect.name);\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\n\nif (caster)\n{\n let bonus = caster.system.characteristics.wp.bonus\n this.actor.modifyWounds(bonus)\n\n this.script.message(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.message(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\n this.effect.sourceItem.delete();\n }\n}","M6sb1yAdEAMlIvac":"return args.item?.system?.attackType == \"ranged\" && this.item.equipped.value","MB058H6OslhfBmxR":"console.log(args)\nreturn args.item?.system?.attackType == \"melee\"","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyTerror(value, name)\n })\n game.canvas.tokens.setTargets([])\n}\nelse \n{\n game.wfrp4e.utility.postTerror(value, name)\n}","MI2GgNi3fZtUCtQD":"return [\"int\", \"wp\"].includes(args.characteristic)","MIhYSuJ6MI9B65UT":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.2 * specification);","MKxYbHOrv0UuA7JB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Blessé\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Contraction de \" + disease.name)\n })\n }","MOZn375tGD2060cC":"const diff = foundry.utils.diffObject(this.item.toObject(), args.data);\nif (args.data?.system?.APdamage?.head > this.item.system.APdamage.head) {\n const result = await game.wfrp4e.tables.rollTable('armet-damage');\n this.script.message(result.result);\n if (result.total > 5) \n delete args.data.system.APdamage.head;\n}","MPK7U4HLmIAsjdqs":"if (args.applyAP)\n{\n args.modifiers.ap.ignored += 2\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore 2 PA\");\n}","McLR9YcgVUG3MooC":"args.applyTB = false;","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\nlet critTable = `crit${this.generalizeTable(loc)}`;\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\n\nthis.script.message(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\n{\n this.script.notification(\"Immunisé à l'état En Flames\")\n await this.actor.hasCondition(\"ablaze\")?.delete()\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils ne peuvent pas lancer de sorts ni prier pour des Bénédictions et des Miracles.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[modérée]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","MgTqCMRjxhezT73T":"return args.fields.hitLocation == \"head\" && args.weapon?.system.properties.qualities.pummel","MgZreqq3Jua10c8s":"return ![\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","Mhb67xufvA9uWO21":"let actorTaille = game.wfrp4e.config.actorTailleNums[args.actor.details.size.value]\nlet attackerTaille = game.wfrp4e.config.actorTailleNums[args.attacker.details.size.value]\n\nif (attackerTaille > actorTaille)\n{\n args.actor.addCondition(\"prone\")\n this.script.message(`Tail Attack: ${args.actor.prototypeToken.name} is now Prone`)\n}","Mir4FMHQRdVqazAF":"let actorTaille = game.wfrp4e.config.actorTailleNums[args.actor.details.size.value]\nlet attackerTaille = game.wfrp4e.config.actorTailleNums[args.attacker.details.size.value]\n\nif (attackerTaille > actorTaille)\n{\n let msg = `Attaque de Langue: ${args.actor.prototypeToken.name} est maintenant @Condition[Entangled]`;\n await args.actor.addCondition(\"entangled\");\n if (actorTaille <= 2)\n {\n msg += `et @Condition[Engaged]`\n }\n this.script.message(msg, {speaker : {alias: args.attacker.prototypeToken.name}})\n}","MkEcdViivk7abf1x":"args.actor.flags.meleeDamageIncrease += 1","MnXny8SCh6OceJc9":"return args.characteristic == \"int\"","MnqQkXVp20Lw84I1":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.message(await this.actor.applyBasicDamage(3, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","Mqbjr3t7IXwFnfCv":"if (this.item.flags.runeOfIron) return\n\n\nconst runesOfIron = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst ironWounds = parseInt(runesOfIron.length * 2)\nconst currentWounds = this.actor.system.status.wounds.value\n\nif (args.equipped) {\n this.item.flags.runeOfIron = true\n this.actor.modifyWounds(ironWounds)\n}\nelse\n{\n this.item.flags.runeOfIron = true\n this.actor.modifyWounds(-ironWounds)\n if (ironWounds > currentWounds) {\n this.script.message(`You have removed ${ironWounds} Wounds by unequipping Runic Armoour, but you only had ${currentWounds} Wounds remaining. This may trigger a critical injury.`)\n }\n}","Msygc7oQQPB5fw0b":"let test = this.effect.sourceTest;\nif (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n{\n\tlet points = await new Roll(\"1d10\").roll({allowInteractive : false});\n\tgame.dice3d?.showForRoll(points)\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value + points.total})\n\tthis.script.message(`Gain de ${points.total} Corruption`)\n}\nelse\n{\n\tlet points = this.effect.sourceTest.result.overcast.usage.other.current;\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value - points})\n\tthis.script.message(`Perd de ${points} de Corruption`)\n}","MwUzyAgd0yPnmZCH":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx\")\nlet data = item.toObject(); \ndata.name = data.name.replace(\"Target\", \"Strangers\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","Myl1Ishu9GBraYUZ":"this.actor.removeCondition(\"bleeding\")","N2MeOlf0GjPiRcSb":"let test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : \"Lâche l'objet\"}})\nawait test.roll();","N6E9Jsd8n2ubCfz8":"for(let key in this.item.system.AP)\n{\n this.item.system.AP[key]++;\n}","N7nGncsPrTz2ZbDA":"return !args.context.dodge || !this.actor.isMounted","N8hA6ysHCTlLd8Kj":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 15,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Savoir (Magie)\" , \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\nlet talents = [\"Magie des Arcanes\", \"Magie Mineure\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\", \"(2M) Bâton de combat\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","NEKLTgJJsayC7tpF":"return [\"ws\", \"ag\"].includes(args.characteristic);","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la valeur de Peur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","NMZ3Fb164tUfwChF":"return !args.data.targets[0]?.actor?.hasCondition(\"entangled\")","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n}\n ","NQSvFWhmBQAyx5Zz":"return args.item?.isProjectiles","NTFpkiGyBpOtrV0s":"if (this.actor.uuid == this.effect.sourceActor.uuid)\n{\n\treturn;\n}\n\nif (this.actor.has(\"À Sang Froid\") && !this.actor.hasSystemEffect(\"nausea\")) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {appendTitle : `- ${this.effect.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n\n let myRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\n let duration = myRoll.total\n this.actor.addSystemEffect(\"nausea\");\n this.script.scriptMessage(`Symptome Nausée ajouté, durée : ${duration} heures`);\n}\n}\nreturn false;","NX9fApO15NQuTipW":"return [\"ws\", \"bs\"].includes(args.characteristic)","Na7Nanl9YmxZlTo7":"return args.type != \"cast\" && args.type != \"channelling\"","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nacutesense = acutesense.toObject();\nacutesense.name += \" (Smell)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\nconst sl = message.system.sl;\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","Np25JqEiaoqerEk8":"if (test.result.tables.miscast) {\n test.result.other.push(`${this.effect.name}: You may reroll any result from the @Table[waaagh-miscast]{Waaagh! Miscast Table}.`);\n}","NqFvdCKDLqIXaE9m":"return args.weapon?.system.isMelee;","NrVFrIXM8GnIbojv":"args.item.system.damage.value += `+ ${this.actor.system.characteristics.fel.bonus}`;","Nuth9S5UHIhpEuIC":"args.fields.modifier -= 20","NvaPNfZt5d9RqKSE":"if (args.test.isCritical) {\n args.test.result.tables.critical.modifier \n = (typeof args.test.result.tables.critical.modifier ==='undefined') \n ? 20 \n : args.test.result.tables.critical.modifier + 20\n}","O45vpR4jDbQQnmvJ":"let items = [];\n\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += \" (Suivants de Khorne)\";\n\nitems.push(etiquette);\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\nanimosity.name = animosity.name.replace(\"(Target)\", \"(Suivants de Slaanesh)\");\n\nitems.push(animosity);\n\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\n","O7lXFZLrLdFaShGR":"args.context.catfall = true;","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\nlet biteData = bite.toObject();\nlet venomData = venom.toObject();\n\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\nvenomData.system.specification.value = \"Average\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","OBF6r2CsMOEokAsS":"args.weaponProperties.damaging = true;\nargs.weaponProperties.impale = true;","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OEy2lxvic37dRBEt":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 Sorts d'Arcane\"})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","OF4sSVOvHoKuPk7L":"if (this.item.flags.burning) return\nconst runesOfBurning = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst ablaze = runesOfBurning.length\nargs.actor.addCondition(\"ablaze\", ablaze)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": \"\n + ablaze + \" @Condition[Ablaze] Conditions\")\nthis.item.flags.burning = true","OFViRemr1cpnO3af":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"bleeding\");\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = foundry.utils.duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll({allowInteractive : false});\nlet regen = regenRoll.total;\n\nif (Blessures.value >= Blessures.max)\n return\n\nif (Blessures.value > 0)\n{\n Blessures.value += regen\n if (Blessures.value > Blessures.max)\n {\n Blessures.value = Blessures.max\n }\n message += `${this.actor.name} regagne ${regen} Point de Blessures.`\n\n if (regen == 10)\n {\n message += `
De plus, il guérit d'une Blessure Critique.`\n }\n}\nelse if (regen >= 8)\n{\n message += `${this.actor.name} a fait un ${regen} et regagne 1 Point de Blessures.`\n Blessures.value += 1\n if (regen == 10)\n {\n message += `
De plus, il guérit d'une Blessure Critique.`\n }\n}\nelse\n{\n message += `${this.actor.name} a fait un ${regen} et ne régénère pas de Point de Blessures.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": Blessures })\nthis.script.message(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","OJMgS8ZQv0j4tEFf":"return [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","OMAUX1fnHyIpplul":"return ![\"fel\", \"dex\"].includes(args.characteristic)","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","OYLqLl6vikJD8flg":"const crowd = this.effect.getFlag(\"wfrp4e\", \"crowd\") ?? 0;\nconst bonus = 2 + Math.floor(crowd * 0.1);\n\nargs.fields.slBonus += bonus ;","OYRUSP7Q0Je0jdCY":"let species = await ValueDialog.create({text : \"Entrez l'Espèce Cible\", title : this.effect.name})\n\nthis.effect.updateSource({name : this.effect.setSpecifier(species)});","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \nawait test.roll();","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\nargs.actor.system.characteristics.t.value += 30\n\nargs.actor.system.characteristics.s.bonus += 3\nargs.actor.system.characteristics.t.bonus += 3\n\nif (args.actor.system.characteristics.s.value > 100)\n{\n args.actor.system.characteristics.s.value = 100\n args.actor.system.characteristics.s.bonus = 10\n}\n\nif (args.actor.system.characteristics.t.value > 100)\n{\n args.actor.system.characteristics.t.value = 100\nargs.actor.system.characteristics.t.bonus = 10\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\n{\n\tthis.script.notification(\"Disabled!\");\n\tawait this.effect.update({\"disabled\" : true})\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\n ","OicQSEVZBbqLtrcf":"let choice = await ItemDialog.create(this.actor.itemTypes.critical, (this.effect.sourceTest.result.overcast.usage.other.current || 1), \"Choisir the Critique Blessures to heal (Impossible de reattach body parts)\")\n\nthis.script.message(`Soin de ${choice.map(i => i.name).join(`, `)}`);\nthis.actor.deleteEmbeddedDocuments(\"Item\", choice.map(i => i.id))","On1itZhp0AOzNyyc":"let test = await this.actor.setupSkill(\"Runesmithing\", {appendTitle: ` - ${this.effect.name}`});\nawait test.roll();\nthis.effect.update({\"disabled\" : true});","OnkEe4ISru1hjJWP":"this.actor.flags.useless[this.item.system.location.key] = true;","Op88kMtimSEWlY2h":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","OqxeuZfZDfm9ax6h":"this.actor.system.status.addArmour(1, {locations : \"head\", source : this.effect})","OsLXutfXyQCAkhAf":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'average';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","OvIELZLvnlN2H2uw":"args.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}});","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\n{\n this.actor.modifyAdvantage(-1);\n this.script.notification(`${this.actor.name} loses 1 Advantage`);\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\nthis.actor.addCondition(\"stunned\", roll.total)","PBW6IZtwawNHxB6y":"return args.context.dodge && this.actor.isMounted","PGHvFHBIygB5pnWT":"args.actor.addCondition(\"ablaze\", 1)\nargs.extraMessages.push(\n \"\" + this.effect.name + \": Ajout d'1 état @Condition[Ablaze]\")","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\n\n attackerReach = warhammer.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = warhammer.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"(Savoir)\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choisir Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"Savoir\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \n (this.actor.isOpposing || args.test.context.defending) && \n args.test.result.roll % 11 == 0 && \n args.test.succeeded && \n [\"Langue (Magick)\", \"Esquive\"].includes(args.test.item?.name))\n {\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\n let text = `${this.effect.name}: Adding Unstable and Ward`\n args.test.result.other.push(text) \n this.script.notification(text);\n \n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n let wardData = ward.toObject();\n wardData.system.specification.value = 9;\n \n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\n let unstableData = unstable.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\n }\n","PjOi61gB2nSYooLs":"return this.sourceActor.uuid === this.actor.uuid || !args.item?.system?.isProjectiles;","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\n item = item.toObject()\n item.system.specification.value = this.actor.characteristics.ag.value\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Taille\")\n{\n let size = this.item.specifier;\n if (!size)\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorTailles, this.item.img), 1, \"Choisir Taille\");\n if (choice[0])\n {\n size = choice[0]?.name;\n }\n }\n this.item.updateSource({\"system.specification.value\" : size, name : this.item.baseName})\n this.effect.updateSource({name : this.effect.name + ` (${size})`})\n}","Pn5fekTbkwlr61XU":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Ingénieur)';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll({allowInteractive : false});\nlet mood = await new Roll(\"-2d10\").roll({allowInteractive : false});\n\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\n\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\n\nthis.effect.delete();","Puv2wLrSVe6b1jLf":"if (args.sizeDiff < 0 ) {\n args.damage += 3\n args.breakdown.other.push({label : this.effect.name, value : 3});\n}","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \n{\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\n let results = roll.results[0]\n\n this.script.message(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n })\n\n }\n\n","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * this.effect.system.condition.value","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\ndata.system.specification.value = \"Lorsque Seul\";\ndata.effects[0].disabled = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","QBBrzcSAe8QqE4WP":"const SL = this.effect.sourceTest.result.SL;\nconst damage = 8 + SL;\n\nawait this.actor.applyBasicDamage(damage, {loc: \"roll\"});\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Reçoit 1 état @Condition[Ablaze].`\n }\n})\n\nawait test.roll();\nif (test.failed) {\n await this.actor.addCondition(\"ablaze\");\n}","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 1;\n\nargs.actor.system.details.man -= 2;","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"alpha\": 0.5,\n \"animation\": {\n \"type\": \"\",\n },\n \"color\": \"#000000\",\n }}));","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\n","QKt9ZYpVpznncfJ1":"for(let key in this.item.system.AP)\n{\n if (this.item.system.AP[key])\n {\n this.item.system.AP[key]++;\n }\n}","QLBxcP85duX1Z7LX":"if (!args.item.actor?.has(\"Béni (Taal)\", \"talent\")) return;\n\nargs.item.system.AP.head = 3;","QLUaOkwuSPvBp7jU":"this.script.scriptNotification(\"Impossible d'attaquer des cibles qui ne sont pas Empêtrée\")\nargs.abort = true;","QNxmImpLTou6WdMQ":"let test = args.test\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\n test.result.other.push(\"Possibilité de faire un test de FM Difficile (-10) pour prévenir la Maladresse\")","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\n args.item.damage.value += \" + 1\"","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.notification(\"Aucun état sur cet acteur\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choisir un état\")\n\nif (choice[0])\n{\n\tthis.actor.removeCondition(choice[0].conditionId)\n}\n","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\n\n if (args.actor.details.move.value > 3)\n {\n args.actor.details.move.value -= 1;\n if (args.actor.details.move.value < 3)\n args.actor.details.move.value = 3\n }","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","QbIYnshWeP1U8SUy":"args.applyAP = false;\nargs.applyTB = false;","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n if (ones > SL) {\n args.test.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Unité du dé utilisée comme DR`)\n }\n}","Qk7t2l5ep9RDVpgE":"args.context.diceman= true;","QoEOxRruQXYrZrv3":"let filters = [\n {\n property : \"type\",\n value : \"skill\"\n },\n {\n property : \"name\",\n value : /Melee/gm,\n regex: true\n }\n]\n\nlet items = await ItemDialog.createFromFilters(filters, 2, {text: \"Choisissez 2 Compétences pour ajouter +20\"})\nitems = items.map(i => i.toObject())\nitems.forEach(i => i.system.advances.value = 20)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QqybHxNCzPEzG1Qh":"return args.context.dualWieldOffhand","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\n\nthis.script.message(content)","R32U01LBjBrK1pns":" const templateMap = {\n 'P2e7Yx98bK3u110a' : \"\",\n 'iuMp3KLaMT2WCmie' : \"4s01nHFKVKTEZd3B\",\n 'RBuYcT5tppwcmnC5' : \"h3yuJDWnixliXeBG\",\n 'vcGpNwNbhvfzVveQ' : \"7QrsbofccMOE1YsF\",\n 'jmhKZy0w9TzkEK9c' : \"scVTPVyDDbli4WZL\",\n '9Byj6k7SmdTYis2V' : \"4Cd7Dknee2WjReOo\",\n 'laJwc2l9tzJPgaaJ' : \"2hJ2a5YjbwZWWYrd\",\n }\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\n\n\n let templateItem = await warhammer.utility.findItemId(templateMap[template._id]);\n\n let bio =\n `\n

Template: ${template.text}

\n

Particularité physique: ${physicalQuirk}

\n

Éthique de travail: ${workEthic}

\n

Particularité de personnalité: ${personalityQuirk}

\n `\n\n this.script.message(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\n\n if (templateItem)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\n }","R3OfRdi6xv0e9mzB":"return args.item.name.includes(\"Arme\")","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 1\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","R8FBHZaaARA3z9pB":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'hard';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","R8ecKGRzOr4ThvVa":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Maintenance Crew Test';\nconst difficulty = 'hard';\nconst target = 80;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.message(\"Gain de 2 états Hémorragique\")\n}","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.message(`${this.item.name} Overloads!`)\n }\n}","RPqgRUkiLY5thVbC":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Strength';\nconst difficulty = 'average';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","RRK91ySi5SzYCRvy":"return args.weapon?.system.isProjectiles","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"disease\")\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choisir une maladie\")\n\nif (choice[0])\n{\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\n}","RUpVgB0czqg95K1Q":"if (this.item.system.protects[args.opposedTest.result.hitloc.value])\n{\n args.weaponProperties.qualities.penetrating = false;\n}","RZlMkxJz5apn0mUj":"return args.item?.system.attackType != \"ranged\"","ReJpL0IVesKUbXgj":"args.fields.slBonus -= 8;","RgNdS87nO7RVawuw":"this.actor.removeCondition(\"fatigued\", 1);","RlVvlmhOfscaJqCd":"const deletes = this.actor.itemTags.armour.map(a => {\n return {_id: a._id}\n});\nconst armourTrait = this.actor.itemTags.trait.find(t => t.name === game.i18n.localize(\"NAME.TraitArmour\"));\n\nif (armourTrait)\n deletes.push({_id: armourTrait._id});\n\nthis.actor.deleteEmbeddedDocuments(\"Item\", deletes);","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\n\nfor (let effect of holed) {\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\n}\n\nthis.script.notification(`Holed Ratings of ${this.actor.name} have been doubled.`);","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"system.transferData.type\" : \"crew\"})","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\nawait args.actor.addCondition(\"deafened\");\nawait args.actor.addCondition(\"stunned\");","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : -5,\n \"t\" : -5,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : -10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = []\nlet skillAdvancements = []\nlet talents = []\nlet trappings = []\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let Compétence = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == Compétence && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(Compétence)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg = ``\nlet armour = args.actor.itemTags.armour.filter(i => i.system.isMetal && i.system.isEquipped);\nfor(let item of armour)\n{\n\tfor(let key in item.system.AP)\n\t{\n\t\tlet AP = item.system.AP[key]\n\t\tlet damage = Math.floor(AP / 2);\n\t\tawait item.system.damageItem(damage, [key]);\n\t}\n\tmsg += `

${item.name} PA divisé par deux

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","RyQtuiRykUCQ6Xag":"if (!this.item.actor.name.includes(\"Brunner\")) return;\n\nargs.actor.addCondition(\"ablaze\");","S1QihXuvdEVzeRtB":"let dice = await new Roll(\"1d10\").roll()\nlet roll = dice.total\nlet talent \nlet message\nlet modifier = 0\n\nif (roll <= 3)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\n}\n\nelse if (roll <= 6)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.OEjUvJKi0xmBwbS2\")\n modifier = -3\n}\n\nelse if (roll <= 9)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mdPGZsn2396dEpOf\")\n modifier = -3\n}\n\nelse if (roll = 10)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\n modifier = -5\n}\n\nmessage = `${roll} Rolled, gain ${item.name}, ${modifier} Strength`\ndice.toMessage(this.script.getChatData())\n\nlet changes = foundry.utils.duplicate(this.effect.changes)\nchanges[0].value = modifier\n\nthis.effect.updateSource({changes})\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})\n\nthis.script.notification(message)","S1SQe0Do7ZcuNV5j":"if (![\"roll\", \"none\"].includes(args.fields.hitLocation))\n{\n args.fields.modifier += 20;\n}","S3DCTw4yJ85eSaKp":"this.actor.setupCharacteristic(\"s\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(test => test.roll())","S3Dev4hleOYqDNe9":"if (args.test.options.healWounds) {\n if (args.test.succeeded)\n {\n let wounds = this.actor.characteristics.int.bonus + Number(args.test.result.SL)\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n }\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`${this.actor.name} guéri ${wounds} Blessures du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n }\n}","S4793DLFhjMxpM8x":"return ![\"ws\", \"bs\"].includes(args.characteristic) && !args.item?.system.attackType && !args.context.dodge","S6tUyFJvGMV19mvP":"this.actor.status.addArmour(2, {source: this.effect})","S95QqpX1cZyIVCPy":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}\n\n","SGr50Hq1AHIEzIFN":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n int : game.wfrp4e.config.characteristics.int,\n fel : game.wfrp4e.config.characteristics.fel\n}, this.effect.img), 1, \"Choisir une caractéristique\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","SK8paBvnvc5YLFI1":"if (args.test.options.doombolt && !args.test.options.doomboltRolled)\n{\n\targs.test.options.doomboltRolled = true;\n\n\tlet test = await this.actor.setupSkill(`${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`, {fields : {difficulty : \"hard\"}, context : {failure : \"@Table[majormis]{Major Miscast}\"}});\n\tawait test.roll();\n\n\tif (test.succeeded)\n\t{\n\t\targs.test.preData.additionalDamage = 4;\n\t}\n}","SKn61f2ykhzuwMdw":"if ((args.test.result.roll % 11 == 0 || args.test.result.roll == 100) && args.test.failed)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n }\n}","SLy1Fs3oXcHgFgjK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet value = foundry.utils.getProperty(this.effect.sourceTest, \"result.overcast.usage.other.current\") || 1\ndata.system.specification.value = value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SO4Aa9argKbuO9rQ":"args.prefillModifiers.modifier -= 20","SPOkFWZWziZk5b7A":"return args.item?.system?.attackType != \"melee\"","SRmfstEs278bP9Pz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SSqGxyN9hw0HDmED":"this.actor.addCondition(\"prone\");","SThruXFhxUdNKCG4":"const test = await this.actor.setupCharacteristic(\"int\", {fields: {difficulty: \"easy\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait Test.roll();\n\nif (Test.Échoué) {\n this.actor.addCondition('stunned');\n}\n\nthis.script.scriptNotification(`${this.actor.name} échou au test d'INT et reçoit un état Sonné!`);","SUfCkHdJg7rttdM1":"let amount = this.effect.sourceActor.system.characteristics.fel.bonus;\nargs.actor.addCondition(\"blinded\", amount);","SWIJjM2RCmzfr64u":"if (args.test.result.hitloc.result == \"head\" && args.test.result.critical)\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40\n\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}\n","SefcrhXsdYGFcCW6":"args.actor.system.details.move.value -= 3;\nargs.actor.system.details.man -= 2;\nargs.actor.system.status.carries.max *= 2;","SjDNjLBGsd9fYObo":"args.applyAP = false;","SlrslcNdnYONcSH3":"let weapon = this.actor.itemTags[\"weapon\"].find(i => i.system.isEquipped);\nif (!weapon)\n{\n this.script.notification(\"Aucune arme équipée!\", \"error\");\n return;\n}\n\nif (await this.actor.spend(\"system.status.fortune.value\", 1))\n{\n let test = await this.actor.setupWeapon(weapon, {appendTitle : ` - ${this.effect.name}`, whirlwind: true});\n test.roll();\n}\nelse\n{\n this.script.notification(\"Pas assez de Chance!\", \"error\");\n}","SlzPn7ONIKab9URj":"if (game.combat.combatant?.actor?.uuid == this.actor.uuid)\n{\n \nthis.script.message(await this.actor.applyBasicDamage(2, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","SreM9Jyj2XZjoezH":"return args.item?.system?.attackType == \"ranged\"","Ssn21dxoMQiqD1y4":"return args.type == \"cast\" && args.item.lore.value == \"fire\"","StAderQaQQsxb6Rv":"let target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n this.script.notification(target.result);\n let hatred = this.actor.items.find(i => i.getFlag(\"wfrp4e\", \"fromEffect\") == this.effect.id)\n if (hatred)\n {\n hatred.update({\"system.specification.value\" : target.result})\n }\n}","SvFKt9hMcFQjeILA":"args.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","SwliIjjjFtZMnJH3":"return !args.weapon?.system.properties.qualities.hack || args.weapon?.system?.isProjectiles","T0KBl8iEkcPq08RI":"if (args.applyAP && args.modifiers.ap.magical)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.magical\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore les PA magiques (\" + args.modifiers.ap.magical + \")\");\n}","T4JEEDYCEIUbVHv4":"let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\n{\n CorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData());\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","TCgEBuMPPd5SLAsc":"args.fields.modifier -= 15","TCtXPvDpbfz1yrVZ":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (A deux mains)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\n let choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Corps à corps (Base)
  2. \n
  3. Corps à corps (A deux mains)
  4. \n
\n `,\n buttons : [\n {\n action : \"basic\",\n label : \"Base\",\n callback : () => {\n return choice1\n }\n },\n {\n action : \"twoHanded\",\n label : \"A deux mains\",\n callback : () => {\n return choice2\n }\n }\n ]\n })\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","TEiNj5FgkoD3YbhS":"this.actor.hasCondition(\"bleeding\")?.delete()","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(\"prone\");\n}","TIoUbjOtj7PTK2t8":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Butcher perd des dents.`\n }\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n const SL = Number(Test.result.SL);\n this.script.message(`Butcher perd ${SL} dents.`);\n}","TKjBb75exjae87fa":"args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 2})","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();","TSsHcn4EDulD03RU":"return !this.actor.hasCondition(\"fatigued\")","TXce477AiXHKbepk":"return args.type !== \"pray\" || args.item?.system?.type?.value !== \"miracle\" || args.item?.system?.god?.value?.toLowerCase() !== \"taal\";","TY0xSQ00XXyEr49r":"args.fields.slBonus += 1;","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","Td8M5K1P92GbM2IA":"if (!args.messageSent)\n{ \n args.messageSent = true;\n let runes = this.actor.effects.contents.filter(i => i.name == this.effect.name);\n this.script.message(`${args.attacker.speaker.alias} reduce Run speed by ${runes.length * 4} yds.`)\n}","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\nlet test = await this.actor.setupTrait(stomp)\nawait test.roll();","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\n \"ws\": 45,\n \"bs\": 30,\n \"s\": 35,\n \"t\": 45,\n \"i\": 30,\n \"ag\": 35,\n \"dex\": 25,\n \"int\": 25,\n \"wp\": 30,\n \"fel\": 25\n}\nfor (let char in this.actor.characteristics) {\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\n this.actor.characteristics[char].initial = gorCharacteristics[char]\n}","TpZItJ5Ugbazaobd":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","TpgK2aAe93ui3Rbs":"if (args.test.isFumble && args.test.options.supercharge) {\n args.test.result.tables.misfire = {\n label : \"Raté (Surchargé)\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n } \n}","TwgdEucxcHloc4cX":"let choice1 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Jambières de cuir\"\n },\n {\n type : \"armour\",\n name : \"Calotte de cuir\"\n },\n {\n type : \"armour\",\n name : \"Veste de cuir\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plastron d'acier\"\n },\n {\n type : \"armour\",\n name : \"Brassards\"\n },\n {\n type : \"armour\",\n name : \"Heaume\"\n },\n {\n type : \"armour\",\n name : \"Jambières d'acier\"\n },\n]\n\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mailles
  2. \n
  3. Mailles et Cuir
  4. \n
  5. Plaques
  6. \n
\n `,\n buttons : [\n {\n action : 1,\n label : \"Mailles\",\n callback : () => {\n return choice1\n }\n },\n {\n action : 2,\n label : \"Mailles et Cuir\",\n callback : () => {\n return choice2\n }\n },\n {\n action : 3,\n label : \"Plaques\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","TxfmxDGBj04AQQpt":"let weapon = args.opposedTest.defenderTest.weapon\nif (\n !args.opposedTest.result.swapped && \n args.opposedTest.result.winner == \"defender\" && \n args.opposedTest.attackerTest.result.damage && \n weapon && \n weapon?.system.properties.qualities.fast\n )\n{\n await args.opposedTest.swap(this.effect.name);\n}","TzgmYRXFXRspIo1i":"this.effect.delete();","U1RUcgP8LD2qeGTm":"return !args.context.reload","U1UpSRJOSjPpO4HS":"let mutations = await warhammer.utility.findAllItems(\"mutation\", \"Loading Mutations\", true)\n\nlet roll = Math.floor(CONFIG.Dice.randomUniform() * mutations.length);\n\nthis.actor.createEmbeddedDocuments(\"Item\", [(await fromUuid(mutations[roll].uuid)).toObject()]);\nthis.script.notification(`Added ${mutations[roll].name}`)","U26XMie3Kjoddisj":"let stunned = this.actor.hasCondition(\"stunned\")\nif (stunned)\n{\n this.script.notification(`Suppression d'1 état 1 Sonné`)\n this.actor.removeCondition(\"stunned\");\n}\nelse\n{\n\tthis.script.notification(`Aucune état Sonné à supprimer`)\n}","U2xKn7R1gm8kiQm8":"this.actor.hasCondition(\"broken\")?.delete();\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","U5ndCwcJ1s3Ns26w":"args.item.system.qualities.value.push({name : \"magical\"});\nargs.item.system.damage.value += ` + ${parseInt(this.effect.sourceTest.result.SL)}`;\nargs.item.name += ` (${this.effect.name})`","UDPsaymtZf39UsMk":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" ce qui est impossible à retirer tant que le symptôme de Malaise est présent.\")\n }","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData());\n args.totalWoundLoss += roll.total;\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true, [\"system.lore.value\"])\n\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\nthis.script.notification(lore)\nif (lore == \"GM's Choice\") {\n return\n}\n\nelse if (lore == \"Magie des Arcanes (Domaine)\") {\n lore = \"Arcane\"\n}\n\nelse if (lore == \"Magie Mineure\") {\n lore = \"petty\"\n}\n\nelse {\n lore = lore.toLowerCase();\n}\n\nlet spellsWithLore = []\nif (lore == \"Arcane\") {\n spellsWithLore = spells.filter(i => !i.system.lore.value)\n}\nelse {\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\n}\n\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\n this.actor.setupCast(item).then(test => test.roll());\n})","UQtXuQmUlTyDKqhe":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 20,\n \"s\" : 0,\n \"t\" : 10,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 40,\n \"wp\" : 45,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Intimidation\", \"Langue (Magick)\", \"Language (Nehekharan)\", \"Savoir (Magie)\", \"Perception\"]\nlet skillAdvancements = [10, 20, 15, 15, 10, 10, 10]\nlet talents = [\"Magie des Arcanes (Domaine)\", \"Dur à cuire\", \"Menaçant\", \"Magie Mineure\", \"Lire/Écrire\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\"]\nlet specialItems = [ \n {name: \"Mouldering Robes\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Pouches containing ritual components\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Staff\", type: \"weapon\", damage: \"SB+2\"}, \n {name: \"Magie Noire (Nécromancie)\", type: \"talent\"},\n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = (await ItemDialog.createFromFilters(filters, 3, {text: \"Choisissez 3 Sorts Mineurs\"})).map(i => i.toObject());\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = (await ItemDialog.createFromFilters(filters, 2, {text : \"Choisissez 2 Sorts d'Arcane\"})).map(i => i.toObject());\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"name\",\n value: /^((?!\\().)*$/gm, // Remove tout spells with parentheses (tout arcane spells spells)\n regex: true\n },\n {\n property : \"system.lore.value\",\n value : \"necromancy\"\n }\n]\n\nlet necromancy = (await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez 1 Sort de Nécromancie\"})).map(i => i.toObject());\n\narcane.forEach(i => {\n i.img = \"modules/wfrp4e-core/icons/spells/necromancy.png\";\n i.system.lore.value = \"necromancy\";\n})\nlet spells = [...petty, ...necromancy, ...arcane];\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items.concat(spells));\n","UUHQRPRrrRSr9MIA":"const venomFlag = this.effect.getFlag(\"wfrp4e-tribes\", \"venom\");\n\nif (venomFlag) {\n this.actor.updateEmbeddedDocuments(\"Item\", [venomFlag]);\n}","UWrzokgabRKUpnkG":"return [\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","UXdlnmwVgjc1QpF2":"args.actor.system.details.move.value += 1;\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.75);","UYLXm2W6jVn21Age":"args.fields.modifier += 40;","UfkysrAftCs09Fct":"return args.skill.name !== game.i18n.localize(\"NAME.Gamble\")","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","UlRSaZG4ZUU6fMND":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","UlygtNPSDlWPIFCI":",args.fields.slBonus++;,args.fields.slBonus++;,args.fields.slBonus++;","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Chausses de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Cotte de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Coiffe de Mailles\"\n },\n {\n type : \"armour\",\n name : \"Jambières de cuir\"\n },\n {\n type : \"armour\",\n name : \"Calotte de cuir\"\n },\n {\n type : \"armour\",\n name : \"Veste de cuir\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plastron d'acier\"\n },\n {\n type : \"armour\",\n name : \"Brassards\"\n },\n {\n type : \"armour\",\n name : \"Heaume\"\n },\n {\n type : \"armour\",\n name : \"Jambières d'acier\"\n },\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Mailles
  2. \n
  3. Mailles et Cuir
  4. \n
  5. Plaques
  6. \n
\n `,\n buttons : [\n {\n action : 1,\n label : \"Mailles\",\n callback : () => {\n return choice1\n }\n },\n {\n action : 2,\n label : \"Mailles et Cuir\",\n callback : () => {\n return choice2\n }\n },\n {\n action : 3,\n label : \"Plaques\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","UsuwsmU1TUQLQVM2":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\nreturn !args.spell || (args.type == \"cast\" && [\"petty\", lore].includes(args.spell.system.lore.value));","UtqUthabeQ4rHDLQ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.tNWrJUOArwfWXsPw\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","Uvk1X7sEhvv77YkD":"if (!args.flags.distractingApplied)\n{\n args.fields.modifier -= 20;\n args.flags.distractingApplied = true;\n}","UwjkHRAQHESdYXJs":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}}));","Ux4buMc7llF1Kg8p":"if (!this.actor.hasCondition(\"stunned\") && !this.actor.hasCondition(\"unconcscious\"))\n{\n this.effect.delete();\n}","UxVfVoH7cbC9ESDr":"const test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain d'1 état @Condition[Stunned].`\n }\n});\n\nawait test.roll();\n\nif (test.failed)\n args.actor.addCondition(\"stunned\");","V0b4yLTawjCnm9ke":"if (args.opposedTest.attackerTest.result.critical\n || (args.totalWoundLoss > 0 && args.totalWoundLoss > args.actor.system.status.wounds.value))\n{\n await args.actor.corruptionDialog(\"minor\")\n}","V1D2Uo3WDKYQePU3":"let damage = this.effect.sourceTest.result.damage;\n \nlet loc = \"head\"\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\nthis.script.message(msg)\n","V2lsVTi6q28eL5jl":"args.fields.slBonus += parseInt(this.effect.sourceTest.result.SL)","V4PcjtHde941wv6J":"await this.actor.addCondition(\"prone\");\nconst SL = this.effect.sourceTest.result.slOver;\nconst stunned = 1 + SL;\nawait this.actor.addCondition(\"stunned\", stunned);\n\nif (stunned > this.actor.system.characteristics.t.bonus) {\n const crit = ` Critique`;\n\n const Test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty: \"average\"},\n context: {failure: `Encaisse ${crit} à la tête.`}\n })\n\n await test.roll();\n}","V7qmFwUMCY2tfziH":"this.actor.addCondition(\"stunned\")","V9wD9FWHWxZUOGSI":"let roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nlet fatigued = roll.total\nroll.toMessage(this.script.getChatData());\nif (fatigued > this.actor.characteristics.wp.bonus)\n{\n this.actor.addCondition(\"unconscious\")\n this.script.notification(`Tombe inconscient\" `)\n}\nelse\n{\n fatigued = Math.max(0, fatigued)\n if (fatigued)\n this.actor.addCondition(\"fatigued\", fatigued)\n this.script.notification(`Reçoit ${fatigued} états Extenué`)\n}","V9xm4X1x3lPYTQaI":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.notification(\"Immunisté à la Peur\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}","V9zm2hKUVLVZtAcN":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 15,\n \"i\" : 15,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charme\", \"Focalisation\", \"Entertain (Prophecy)\", \"Intuition\"]\nlet skillAdvancements = [0, 0, 20, 10]\nlet talents = [\"Détection d’artefact\", \"Menaçant\", \"Sixième Sens\"]\nlet traits = [\"Condamné\", \"Spellcaster (Lore of Life)\", \"Protection\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Forêt d'épines\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let Compétence = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == Compétence && i.type == \"Compétence\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(Compétence)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name +='Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","VAPsww9x3HAw1sKP":"return !args.context.dodge","VGuZMIR1lE8I1F1y":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n this.actor.addCondition(\"stunned\");\n}","VINX6TBAJQznhVcN":"const repaired_message = `

Le remplacement de ${this.item.name} par un équipement de fortune est terminé.

`;\nconst Test = 'Test de l\\'équipe de maintenance';\nconst difficulty = 'difficile';\nconst target = 80;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","VLdF2HPnCrNIgp7a":"let items = [];\n\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += \" (Followers of Khorne)\";\n\nitems.push(etiquette);\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\n animosity.system.specification.value = \"Followers of Slaanesh\";\n\nitems.push(animosity);\n\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\n","VOc9sKag2Vy4vGGZ":"let specifier = this.item.specifier;\nlet rune;\nlet categories = [];\nif (specifier && specifier.toLowerCase() != \"toutes formes\")\n{\n if (specifier.includes(\"Talisman\"))\n {\n categories.push(\"talisman\");\n }\n if (specifier.includes(\"Protection\"))\n {\n categories.push(\"protection\");\n }\n if (specifier.includes(\"Arme\"))\n {\n categories.push(\"weapon\");\n }\n if (specifier.includes(\"Armure\"))\n {\n categories.push(\"armour\");\n }\n if (specifier.includes(\"Engineering\"))\n {\n categories.push(\"engineering\");\n }\n\n if (categories.length)\n {\n let runes = await warhammer.utility.findAllItems(\"wfrp4e-dwarfs.rune\", null, true, [\"system.category\", \"system.master\"]);\n let choices = runes.filter(i => categories.includes(i.system.category) && i.system.master);\n\n if (choices.length)\n {\n rune = (await ItemDialog.create(choices, 1, {title : this.effect.name, text : specifier, indexed: true}))[0]\n } \n else \n {\n rune = await DragDialog.create({text : `Provide Master Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text : `Provide Master Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text : `Provide Master Rune to learn`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit fournir une Rune Maîtresse\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effect)\n\nlet talents = this.actor.itemTags.talent.filter(i => i.baseName == this.item.baseName);\nlet xpCost = talents.length * 100\n\nif (this.actor.type == \"character\" && (await foundry.applications.api.DialogV2.confirm({window: {title: this.effect.name}, content: `

Spend ${xpCost} XP for learning ${this.item.name}?

`})))\n{\n this.actor.update({\"system.details.experience.log\" : this.actor.system.addToExpLog(xpCost, this.item.name, this.actor.system.details.experience.spent + xpCost)})\n}","VRDS4lkwSAzbtvm4":"if (args.totalWoundLoss > this.actor.system.status.wounds.value || args.opposedTest?.attackerTest.result.critical)\n{\n args.extraMessages.push(`${this.effect.name}: Can reverse Critical Wound roll`)\n}","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VTzpExK3QSCaFQPf":"if (args.equipped) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\n let regen = item.toObject();\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\");\n let terror = item.toObject();\n terror.system.specification.value = 2;\n this.actor.createEmbeddedDocuments(\"Item\", [regen, terror], {fromEffect : this.effect.id});\n} \nelse \n{\n this.effect.deleteCreatedItems();\n}","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Ajouter PA de métal aux Dégâts\" })\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","Vb7rgl8T4VRswbnZ":"this.actor.status.addArmour(parseInt(this.item.system.specification.value) || 0, {source: this.effect, damage : this.item.getFlag(\"wfrp4e\", \"APdamage\")})","VbI0Al6rJfypV3qY":"const failure = game.i18n.localize(\"ROLL.ImpressiveFailure\");\nconst success = game.i18n.localize(\"ROLL.AstoundingSuccess\");\n\nargs.test.result.description = args.test.succeeded ? success : failure;","VcE8Hie2jbpuyuM3":"const vomit = this.actor.itemTags.trait.find(t => t.name === \"Vomissement\");\nconst name = \"Bileful rollTest\";\n\nif (!vomit) return;\n\nconst effect = vomit.effects.find(e => e.name === \"Vomissement\");\nconst scriptData = effect.system.scriptData;\n\n// REMINDER\n\nscriptData.push({\n label: 'Rappel des règles du sort',\n trigger: 'rollTest',\n script: `\n args.test.result.other.push(\"This rollTest attack follows the rules for the Lore of Nurgle spell @UUID[Compendium.wfrp4e-core.items.Item.XhyZ140R1iA1J7wZ].\");\n `\n});\n\n// /REMINDER\n\n// update Effect's name\nawait effet.update({\n name,\n \"system.scriptData\": scriptData\n});\n\n\n// update Trait's name\nawait vomit.update({name});\n\n// copy effect from Stream of Corruption spell\nconst effectData = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.XhyZ140R1iA1J7wZ.ActiveEffect.KAXAHr5NdusLTz6k\")).toObject();\n\nawait vomit.createEmbeddedDocuments(\"ActiveEffect\", [effectData]);","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \n\n attackerReach = warhammer.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = warhammer.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","W2rdTwflbUVxFyfd":"let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {context : {failure : this.actor.name + \" meurt de la Pourriture\"}, fields: {difficulty}, appendTitle : \" - Pourriture\"})\n await Test.roll();\n if (Test.Échoué)\n {\n this.actor.addCondition(\"dead\");\n }","W5qtA7Ul5cOj18Nd":"this.item.update({\"system.AP\" : {lArm : 3, rArm : 3, lLeg : 3, rLeg: 3}});","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}","WB6sIpLEPC8YPX67":"if (args.context.dodge)\n{\n\targs.abort = true;\n\tthis.script.notification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\n{\n args.item.system.qualities.value.push({name : \"magical\"})\n}","WO5n7Vbx8AgoVrwC":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Intuition\", \"Savoir (Local)\", \"Perception\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = []\nlet trappings = [\"Cotte de Mailles\", \"Chausses de Mailles\", \"Coiffe de Mailles\", \"Arme simple\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","WOpRJluHKER1MdgI":"let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {context : {failure : this.actor.name + \" meurt de la Pourriture\"}, fields: {difficulty}, appendTitle : \" - Pourriture\"})\n await Test.roll();\n if (Test.Échoué)\n {\n this.actor.addCondition(\"dead\");\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\n{\n\tthis.actor.addCondition(\"dead\");\n}","WR0Kqn8CF5iwToak":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'difficult';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","WaeL2I8VVJmBBKHk":"const vomit = this.actor.itemTags.trait.find(t => t.name === \"Vomissement\");\nconst name = \"Test de Corruption\";\n\nif (!vomit) return;\n\nconst effect = vomit.effects.find(e => e.name === \"Vomissement\");\nconst scriptData = effect.system.scriptData;\n\nscriptData[0].script = `\nargs.actor.addCondition(\"stunned\");\nargs.actor.corruptionDialog(\"moderate\");\n`\n\nawait effect.update({\n name,\n \"system.scriptData\": scriptData\n});\n\nawait vomit.update({name});","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","Wh1VV3javfzcV3bP":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true, [\"system.lore.value\"]);\n\nspells = spells.filter(i => [\"dark\", \"light\", \"fire\", \"life\", \"beasts\", \"shadows\", \"death\", \"heavens\", \"metal\"].includes(i.system.lore.value)).sort((a, b) => a.name > b.name ? 1 : -1);\n\nlet choices = await ItemDialog.create(spells, 7, {text : \"Choisissez 7 Sorts parmi toute combinaison de Magie de Couleur, Sorcellerie ou Magie Noire\", title : this.effect.name})\n\nthis.actor.addEffectItems(choices.map(i => i.uuid), this.effect)","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 3\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","WsN2R1qOzuLa2qyB":"let specifier = this.item.specifier;\nlet rune;\nlet categories = [];\nif (specifier && specifier.toLowerCase() != \"toutes formes\")\n{\n if (specifier.includes(\"Talisman\"))\n {\n categories.push(\"talisman\");\n }\n if (specifier.includes(\"Protection\"))\n {\n categories.push(\"protection\");\n }\n if (specifier.includes(\"Arme\"))\n {\n categories.push(\"weapon\");\n }\n if (specifier.includes(\"Armure\"))\n {\n categories.push(\"armour\");\n }\n if (specifier.includes(\"Engineering\"))\n {\n categories.push(\"engineering\");\n }\n\n if (categories.length)\n {\n let runes = await warhammer.utility.findAllItems(\"wfrp4e-dwarfs.rune\", null, true, [\"system.category\", \"system.master\"]);\n let choices = runes.filter(i => categories.includes(i.system.category) && !i.system.master);\n\n if (choices.length)\n {\n rune = (await ItemDialog.create(choices, 1, {title : this.effect.name, text : specifier, indexed: true}))[0]\n } \n else \n {\n rune = await DragDialog.create({text : `Provide Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text : `Provide Rune to learn (${specifier})`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text : `Provide Rune to learn`, title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit fournir une Rune (non-Maîtresse)\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effect)\n\nlet talents = this.actor.itemTags.talent.filter(i => i.baseName == this.item.baseName);\nlet xpCost = talents.length * 100\n\nif (this.actor.type == \"character\" && (await foundry.applications.api.DialogV2.confirm({window: {title: this.effect.name}, content: `

Spend ${xpCost} XP for learning ${this.item.name}?

`})))\n{\n this.actor.update({\"system.details.experience.log\" : this.actor.system.addToExpLog(xpCost, this.item.name, this.actor.system.details.experience.spent + xpCost)})\n}","WtbSIghR0q4euE7J":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula = `(${args.data.formula}) * 2`;\n}","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\n\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\n grim.update({\"system.specification.value\": 4});\n}\n\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\n grim.update({\"system.specification.value\": 2});\n}","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\nitem.name += ` (Disabled by ${this.item.name})`;","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","XCAfy460IotarQek":"return false;","XO9m2AvFRAAeEuty":"if (args.test.options.fieldDressing && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: SL limited to 1`)\n}","XPpHYTTT0hqYuSfa":"fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\").then(item => {\n item = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","XPxAKqPpPYE4E6B5":"args.fields.modifier -= 10 * this.effect.conditionValue","XRrGBbplNLZpXnCH":"let item;\nlet items = []\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\n{\n let data = item.toObject();\n data.system.specification.value = 2\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.mDgEMOoJpi8DkRYb\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\n{\n let data = item.toObject();\n data.system.specification.value = 2;\n items.push(data)\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","XSbQKrrbjsN15Zp9":"if (!args.messageSent)\n{\n args.messageSent = true;\n let advantage = this.item.effects.filter(i => i.name == this.effect.name).length;\n this.actor.setAdvantage(advantage)\n this.script.message(`Allies within 12 yards gain ${advantage} Advantage`)\n}","XXnzUdsIYQ9Wjyu0":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale || this.actor.sameSideAs(this.effect.sourceActor)","XYaYeiVkc5GKYTjC":"return args.spell?.system.lore.value != \"fire\"","XcvDYNZgJ2rpAdDV":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Etat Extenué ajouté à \" + this.actor.name + \" qui est impossible à retirer tant que le symptôme de malaise est présent.\")\n }","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\n{\n args.addImpact = true;\n args.opposedTest.result.other.push(\"Impact against Skaven\")\n}","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","XfSxXatjEYlPEbaK":"const broken = this.actor.hasCondition(\"broken\");\n\n//broken?.delete();","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","XjUXxUA0hbwjUatW":"if (this.actor.hasCondition(\"engaged\") && this.effect.disabled)\n{\n this.effect.update({\"disabled\" : false})\n this.item.effects.contents[1].update({\"disabled\" : false});\n this.script.notification(\"Enabled\")\n}\nelse if (this.effect.active && !this.actor.hasCondition(\"engaged\"))\n{\n this.effect.update({\"disabled\" : true})\n this.item.effects.contents[1].update({\"disabled\" : true});\n \n}","Xk9XPklxxTvFlwpI":"args.context.useOnesArgumentative = true;","XthZ3GCC3WhsEI2g":"args.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n}});","Xu5cED1MhT4ba7da":"args.fields.modifier += 10\n","XzJotwVUIuQu6b0G":"return !args.context.whirlwind || !args.weapon || !this.actor.has(game.i18n.localize(\"NAME.DualWielder\"), \"talent\") || this.actor.noOffhand","Y27MmN5KFw45d5vQ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {difficulty: \"challenging\"})\nawait test.roll();\nif (!test.succeeded)\n{ \n let rollResult = await (await fromUuid(\"RollTable.GL7rKOEThauPUK0E\")).roll({allowInteractive : false});\n let diseaseId = rollResult.results[0].documentId;\n let disease = await fromUuid(\"Item.\"+diseaseId);\n obj = disease.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [obj]);\n}","Y43z8YCohJMA8Ia7":"if (!args.test.preData.options?.giantbane) return\nif (!this.item.equipped.value || !args.test.item) return;\nargs.test.preData.canReverse = true","Y6ppJBerpM3TtSic":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.g4Q6AtzZuo5iIvD4\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","Y7McxsHFeGhwQx0J":"this.actor.createEmbeddedDocuments(\"Item\", [foundry.utils.expandObject({\n name : \"Ghostly Flame\",\n type : \"weapon\",\n img : this.effect.img,\n system : {\n \"weaponGroup.value\" : \"throwing\",\n \"damage.value\" : \"SB + WPB\",\n \"qualities.value\" : [{name : \"magical\"}],\n \"equipped\" : true\n }\n})], {fromEffect: this.effect.id})","Y8J66v8VTKUASGuK":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.notification(\"Aucun état sur cet acteur\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choisir un état\")\n\nif (choice[0])\n{\n\tawait this.actor.removeCondition(choice[0].conditionId)\n}\n\nif (this.actor.effects.find(e => e.isCondition))\n{\n return false; // Delete the effect if there are still conditions, otherwise, effect remains and provides the bonus\n}","YDANERWYHyJ2ACeo":"args.fields.modifier -= 25","YHEIkBKWXKNPqglh":"if (args.test.result.castOutcome == \"success\")\n{\n CorruptionMessageModel.createCorruptionMessage(\"moderate\", this.script.getChatData())\n}\n","YJX7WnxzXXIVdH6P":"let lore = await ValueDialog.create({text : \"Choisissez un Savoir\", title: \"Savoir\"}, \"\", {\"fire\" : \"Fire\", \"death\" : \"Death\", \"metal\" : \"Metal\", \"shadow\" : \"Discret\"});\n\nlet filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await ItemDialog.createFromFilters(filters, 6, {title : this.effect.name, text : \"Choisissez 6 Sorts Mineurs\"})\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"\"]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effect.name, text : \"Choisissez 12 Sorts d'Arcane\"})\n\nlet items = petty.map(i => i.toObject()).concat(arcane.map(i => {\n let spell = i.toObject();\n spell.img = `modules/wfrp4e-core/icons/spells/${lore}.png`\n spell.system.lore.value = lore;\n return spell;\n}));\n\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","YN8719gme9AxYtyY":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Commandement\", \"Savoir (Magie)\", \"Savoir (Théologie)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\n\nlet talents = [\"Harmonisation Aethyrique\", \"Diction Instinctive\", \"Diction Instinctive\", \"Chanceux\", \"Perception de la magie\", \"Menaçant\", \"Magie des Arcanes (Domaine)\", \"Magie Mineure\", \"Seconde Vue\", \"Sixième Sens\"]\nlet trappings = [\"Arme simple\", \"Robes\", \"(2M) Bâton de combat\"]\nlet specialItems = [ \n {name: \"Magic Item\", type: \"trapping\", trappingType: \"misc\" }, \n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\n args.test?.result?.other.push(\"Gain de +1 Corruption supplémentaire de \" + this.effect.name)\n}","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\nthis.script.notification(\"Etat Exténué ajouté\")","YaKnYEbmmZZtByJc":"if (args.opposedTest.attackerTest.options.ballockKnife)\n{\n args.weaponProperties.impale = true;\n args.extraMessages.push(`${this.item.name}: Impale Added`)\n}","YdiQFkm8j48Xs7gI":"if (args.totalWoundLoss > 0 && args.opposedTest.attackerTest.result.critical && args.opposedTest.result.hitloc.value == \"head\") {\n let brainRot = await fromUuid(\"Compendium.wfrp4e-lustria.items.Item.IsNQH867Y58pZgq6\");\n args.test.targets[0].createEmbeddedDocuments(\"Item\", [brainRot], {fromEffect : this.effect.id});\n this.script.scriptMessage(`${args.test.targets[0].name} has been infected by Brain Rot`);\n}","Yf2MmOzazzMdmoPU":"let armour = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\nlet armourData = armour.toObject()\narmourData.system.specification.value = 1\n \nlet fury = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet furyData = fury.toObject();\n\nlet horns = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet hornsData = horns.toObject()\nhornsData.system.specification.value = 6\n\nthis.actor.createEmbeddedDocuments(\"Item\", [armourData, furyData, hornsData], {fromEffect : this.effect.id})","YfRPSgJjvHvl50HW":"return args.skill?.name != \"Runesmithing\"","YjAIsFlxKTJvYs60":"this.item.system.reduceQuantity();","YjJcRdytVRm88qLn":"args.context.additionalDamage = 1","YrXhk2YJaWSChMhp":"// Brawling management\nlet base = this.actor.characteristics.ws.value;\nlet melee = this.actor.has(\"Corps à corps (Bagarre)\", \"skill\");\nif (!melee) {\n melee = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jLyoyqwmBVPjRjhM\");\n melee = melee.toObject();\n melee.system.modifier.value = 55 - base;\n await this.actor.createEmbeddedDocuments(\"Item\", [melee], {fromEffect : this.effect.id});\n} else {\n //this.actor.updateEmbeddedDocuments(\"Item\", { _id: melee.id, 'system.modifier.value': 55-base});\n await this.effect.update({\"flags.wfrp4e.fistsOfGork\" : 55 - base})\n}\n\n// Weapon management\nbase = this.actor.characteristics.s.bonus;\nweapon = await fromUuid(\"Compendium.wfrp4e-core.items.Item.AtpAudHA4ybXVlWM\");\nweapon = weapon.toObject();\nweapon.name = \"Fists of Gork\";\nweapon.img = this.effect.img;\nweapon.system.rollable.skill = \"Corps à corps (Bagarre)\";\nweapon.system.specification.value = 9 - base;\nawait this.actor.createEmbeddedDocuments(\"Item\", [weapon], {fromEffect : this.effect.id});\n\n//this.script.scriptMessage(`${this.actor.name} now has Melee (Brawling) 55 and Weapon (Fists) +9`);","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","YsUdMhQ2AArcJIqy":"let choice1 = [\n {\n type: \"trait\",\n name: \"Corruption (Mineure)\",\n diff : {\n system : {\n specification : {\n value : \"Minor\"\n }\n }\n }\n },\n {\n type: \"trait\",\n name: \"Infecté\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n foundry.utils.mergeObject(item, c.diff);\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\nlet fel_gain = 0\nif (args.actor.characteristics.fel.value <= 0)\n{\n fel_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\n\nif (fel_gain)\n msg += ` and ${fel_gain} Fellowship`\n\n\nlet newInt = i_gain + args.actor.characteristics.int.modifier\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\n\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\n\nthis.script.message(msg)","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\n\nif (newEffect)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\n}","YySjPfSAPdMAfjsh":"let talents = [\"Charge Berserk\", \"Vigilance\", \"Combat Instinctif\", \"Assaut féroce\", \"Endurci\", \"Résistance à la Magie\", \"Resistance (Magic)\", \"Déterminé\", \"Coup puissant\", \"Guerrier né\"];\nlet currentCareer = this.actor.system.currentCareer;\n\nif (!currentCareer) return;\n\nfor (let talent of talents) {\n if (currentCareer.system.talents.includes(talent))\n continue;\n currentCareer.system.talents.push(talent);\t\n}\n\n","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nitem = item.toObject()\nitem.name = this.effect.name\nitem.system.specification.value = this.actor.characteristics.s.bonus\nitem.system.description.value = \"\"\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\n args.actor.system.details.move.sail.value -= 2;\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\nif (ablaze)\n{\n this.script.notification(\"Immunisé au feu\");\n ablaze.delete()\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true);\n\nlet choice = await ItemDialog.create(spells, 1);\n\nif (choice[0])\n{\n this.script.message(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\n foundry.utils.setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\n spell.system.wind.value = \"Focalisation (Dhar)\";\n spell.system.memorized.value = true;\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\n}","ZCBcwbVFHFTFRntb":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ZCkYe5XMVY1RWMXG":"args.context.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effet because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Divisé les dégats par deux? (Divise les dégats de tout feu par deux)\"})\n}\nelse\n{\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par deux\", value : \"× 0.5\"})\n}","ZEXhYJqqxF6QAixX":"return args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\n\nswitch (initiativeSetting) {\n case \"default\":\n args.initiative += \"+10\"\n break;\n\n case \"sl\":\n args.initiative += \"+1\"\n break;\n\n case \"d10Init\":\n args.initiative += \"+10\"\n break;\n\n case \"d10InitAgi\":\n args.initiative += \"+1\"\n break;\n}","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet biteData = bite.toObject();\nlet infectedData = infected.toObject();\n\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\n\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\ndata.system.specification.value = \"Religion\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","ZMwJad6v4G13SgjR":"return args.type == \"cast\" || args.type == \"channelling\"","ZNu4B0OdjkM9lmtu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Vision)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZOgtDW3mkTfeyc5M":"args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1;","ZRoG7GiMDQWso6gN":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'difficult';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\n{\n // Wait till after chat card is posted\n warhammer.utility.sleep(500).then(() => {\n game.wfrp4e.utility.postTerror(1, this.effect.name)\n game.wfrp4e.utility.postTerror(2, this.effect.name)\n })\n}","ZURBQYTYcP5jci5k":"const broken = this.actor.hasCondition(\"broken\");\n\nbroken?.delete();","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Peur 2 \n// in Wolves, Lions, Goats, and Chimeras.\ngame.wfrp4e.utility.postPeur(2, this.effect.name)\n","ZbuW8y7t9Y8oUFWq":"return !((args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\"))","ZdHvGvSJBsIuPphF":"return !args.data.dualWieldingOption && !args.context.dualWieldOffhand","ZfgPAtNKA5KrETer":"return args.type == \"cast\";","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","Znz4g56UH23SSCg7":"if (!args.messageSent)\n{\n args.messageSent = true;\n let advantage = this.item.effects.filter(i => i.name == this.effect.name).length;\n this.actor.setAdvantage(advantage)\n this.script.message(`Allies within 6 yards gain ${advantage} Advantage`)\n}","ZqTW093qENOwGONP":"let msg = \"\"\n\nlet SL = parseInt(this.effect.sourceTest.result.SL);\n\nfor(let i = 0; i < SL; i++)\n{\n msg += `

${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}

`\n}\n\nthis.script.message(msg);","ZrePyV2spv3v65Tg":"return args.type != \"weapon\" && !this.actor.statuses.has(\"infighting\")","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\nlet holed = this.actor.flags.holed || {holed: 0};\nholed.holed += rating;\nthis.actor.flags.holed = holed;\n","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = 0\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"Loading Careers\", true);\ncareers.forEach(c => {\n if (!c.id)\n {\n c.id = c._id;\n }\n});\nlet choice = await ItemDialog.create(careers, 1, {text : \"Choisissez une Carrière de Double Vie\", title : this.effect.name, indexed : true});\nif (choice[0])\n{\n let career = choice[0];\n let data = career.toObject();\n foundry.utils.setProperty(data, \"flags.wfrp4e.doubleLife\", true);\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n this.effect.updateSource({name : this.effect.setSpecifier(data.name)})\n}\n","a7pEvCycVnFBXGAQ":"let test = await this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\nawait Test.roll();\n\nif (!Test.succeeded)\n{\n\tthis.actor.addCondition(\"stunned\");\n}","a81IMxqmMtHgYnIF":"return !args.weapon?.system.isMelee;","a8RabrnJ08O07rDX":"if (args.totalWoundLoss > 0)\n{\n // I'm assuming the endurance test specified is for the end-round check\n await args.actor.addCondition(\"poisoned\", 2);\n}","a8i0sA1RBnD8nHZt":"let caster = this.effect.sourceActor\nlet targetedItem = this.effect.system.itemTargets[0];\n\nlet qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities);\nlet flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws);\n\nif (targetedItem.type == \"weapon\")\n{\n foundry.utils.mergeObject(qualities, game.wfrp4e.config.weaponQualities)\n foundry.utils.mergeObject(flaws, game.wfrp4e.config.weaponFlaws)\n}\nelse if (targetedItem.type == \"armour\")\n{\n foundry.utils.mergeObject(qualities, game.wfrp4e.config.armorQualities)\n foundry.utils.mergeObject(flaws, game.wfrp4e.config.armorFlaws)\n}\n\nfor(let q in qualities)\n{\n // If the weapon already has a flaw, don't put it in the dialog\n if (targetedItem.system.properties.qualities[q])\n {\n delete qualities[q]\n }\n}\nfor(let f in flaws)\n{\n // If a weapon doesn't have a flaw, don't put it in the dialog\n if (!targetedItem.system.properties.flaws[f])\n {\n delete flaws[f]\n }\n}\n\nlet added = await ItemDialog.create(ItemDialog.objectToArray(qualities), \"unlimited\", \"Choisir les Qualités à ajouter\");\nlet removed = []\nif (!foundry.utils.isEmpty(flaws))\n{\n removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), \"unlimited\", \"Choisir les Défauts à retirer\");\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.propertiesChanged\" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}})\n","aCVtaW8ag1WibcAr":"args.attacker.modifyWounds(1)\nthis.script.message(`${args.attacker.prototypeToken.name} recovers 1 Wound.`)","aFwNs7TMVF90i9JF":"let tireless = this.item.Advances + 1\nlet fatigued = this.actor.hasCondition(\"fatigued\").conditionValue\nif (args.flags?.tireless == undefined) {\n args.fields.modifier += 10 * (Math.min(tireless, fatigued));\n args.flags.tireless = true\n}","aIYUsBIDKWJ3CEtj":"this.script.message(await this.actor.applyBasicDamage(20, {suppressMsg: true}));","aMHGjWyn6BXCI4pw":"let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.hXcfygzujgyMN1uI\");\nthis.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect: this.effect.id})","aPZiVhgwR0Xql6AM":"let effectsToEnable = this.actor.items.filter(i => i.type == \"disease\").reduce((effects, item) => effects.concat(item.effects.contents), []).concat(this.actor.effects.contents.filter(i => i.isCondition)).filter(i => i.disabled);\n\nif (effectsToEnable.length)\n{\n this.script.notification(`Re-enabling ${effectsToEnable.map(i => i.name).join(\", \")}.`);\n effectsToEnable.forEach(i => i.update({disabled : false}))\n}","aRvJUcgYqhRmmWYC":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.e3McIND4Rrsn5cE6\", this.effect, {\"system.advances.value\" : 1}, {skipExperienceChecks : true})","abLWYtNTu1UVDQAs":"if (args.opposedTest.result.hitloc.value == this.effect.flags.wfrp4e.location) // e.g. 'head', rLeg, 'lArm'\n{\n this.message(`Gains a @Condition[Blinded] condition as their ${this.item.name} was hit`);\n this.actor.addCondition(\"blinded\");\n}","abVIvJBzuskNzCQv":"let amount = this.effect.sourceTest.result.overcast.usage.other.current;\n\nlet sss = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet strider = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\n\nlet items = Array(amount).fill(sss).concat(Array(amount).fill(strider))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","aeBetniKqq5SD9Ou":"let characteristics = {\n \"ws\" : 30,\n \"bs\" : 20,\n \"s\" : 20,\n \"t\" : 25,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 30,\n \"wp\" : 40,\n \"fel\" : 30\n}\nlet skills = [\"Intimidation\", \"Langue (Classique)\", \"Commandement\", \"Savoir (Guerre)\", \"Savoir (Histoire)\", \"Perception\"]\nlet skillAdvancements = [20, 30, 20, 30, 20, 20]\nlet talents = [\"Vigilance\", \"Combat Instinctif\", \"Coude-à-coude\", \"Menaçant\", \"Robuste\", \"Coup puissant\", \"Coup puissant\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Plastron d'acier\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","aedzdFyjI80Ah3qC":"return !this.item.equipped.value \n || !args?.weapon\n || !([\"giant\"].includes(args.target.Species.toLowerCase()))","agsm3NI1NDtHRG4y":"this.actor.getActiveTokens().forEach(t => t.document.update({texture : this.actor.prototypeToken.texture}, {animate : false}));","ahbA7o5G9dzMFl76":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","alJgj25l3239h2SW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hTgrGkWnmIR4xhVe\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","araS9qYWOAVrV8F7":"args.actor.system.details.man -= 3;\nargs.actor.system.details.move.value -= 2;","ayIbw2Vw2t9xg33P":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","b1zMefdoZYtzCm7i":"return [\"roll\", \"none\"].includes(args.fields.hitLocation) || args.item?.attackType != \"ranged\"","b2Kb4IuD22RhKhR0":"let actor = Array.from(game.user.targets)[0]?.actor;\n\nif (actor)\n{\n actor.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[0].uuid})\n}\nelse\n{\n this.script.notification(\"Aucune cible!\", \"error\")\n}","b2WaqRna5CFXmbDG":"args.context.stag = true;","b4CIeJF2L4E1qikC":"return !args.skill","b5DfAWtpV1x2R8If":"this.script.message(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","b787rIfyHF5LnALd":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.HbrwGhUl0ZXz4kLA\")\nlet hardy = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.VUJUZVN3VYhOaPjj\")\nlet armour = item.toObject();\narmour.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [armour, hardy], {fromEffect : this.effect.id});","b8G4cjfn3RG2tEYX":"this.actor.addCondition(\"ablaze\", 3);","b8XFmEUu1d2YNQ7F":"const {targetUuid, characteristicsToSwap} = this.effect.flags.wfrp4e;\n\nif (!characteristicsToSwap) return;\n\nconst target = fromUuidSync(targetUuid);\n\nif (!target) return;\n\nfor (const char of characteristicsToSwap) {\n args.actor.system.characteristics[char].advances = target.system.characteristics[char].advances;\n args.actor.system.characteristics[char].bonus = target.system.characteristics[char].bonus;\n args.actor.system.characteristics[char].bonusMod = target.system.characteristics[char].bonusMod;\n args.actor.system.characteristics[char].calculationBonusModifier = target.system.characteristics[char].calculationBonusModifier;\n args.actor.system.characteristics[char].initial = target.system.characteristics[char].initial;\n args.actor.system.characteristics[char].modifier = target.system.characteristics[char].modifier;\n args.actor.system.characteristics[char].value = target.system.characteristics[char].value;\n}","bBdXzBmxgFFBwMMS":"if(args.opposedTest.attackerTest.item?.isProjectiles && args.applyAP && !args.sureShot)\n{\n if (args.modifiers.ap.value)\n {\n args.sureShot = true;\n args.modifiers.ap.details.push(`${this.effect.name} (Ignore ${this.item.Advances})`)\n args.modifiers.ap.ignored += this.item.Advances;\n }\n}","bDS62ctjfnTU4xIu":"return args.skill.name !== game.i18n.localize(\"NAME.Leadership\")","bEVlJOOA1kLlzpWx":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Commandement\" , \"Savoir (Magie)\" , \"Savoir (Théologie)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\nlet talents = [\"Harmonisation Aethyrique\", \"Magie des Arcanes\", \"Diction Instinctive\", \"Diction Instinctive\", \"Chance\", \"Sens de la Magie\", \"Menaçant\", \"Magie Mineure\", \"Seconde Vue\", \"Sixième Sens\"]\nlet trappings = [\"Arme simple\", \"(2M) Bâton de combat\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","bL98Sr1TRLMPEdlk":"if (args.test.failed)\n{\n\tthis.actor.addCondition(\"fatigued\");\n}","bLkt8VpTTPoTxW0W":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Etat Hémorragique ajouté\")\n}\n","bMEFHPCei2evnZZw":"// Victims that take at least 1 Wound from a Fell Dagger\n// immediately take a Poisoned Condition \n// resisted with a Difficult (-10) Résistance Test. \n\n// TODO: Add Venin strength to message\n\nif (args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"poisoned\")\n this.script.message(`\n ${this.effect.name}:
\n ${args.actor.name} has been given a @Condition[Poisoned] Condition, which can be resisted with a Difficult (-10) Résistance Test.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","bNhpJPWwoHLq68zD":"let actor = await DragDialog.create({title : this.effect.name, text : \"Fournissez un Acteur tatoueur (fermer pour ignorer les Tests)\"})\n\nif (!actor)\n{\n this.script.notification(\"Tests ignorés pour appliquer les tatouages\");\n if (await foundry.applications.api.Dialog.confirm({\n window: {title: this.effect.name},\n content : \"

Apply Ward of Grimnir effet?

\"\n }))\n {\n return;\n }\n else \n {\n return false;\n }\n}\n\n\nlet failed = false;\nif (this.actor.itemTags.skill.find(i => i.name == \"Savoir (Théologie)\"))\n{\n let test = await this.actor.setupSkill(\"Savoir (Théologie)\", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"vhard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n}\nelse \n{\n this.script.notification(\"Compétence Savoir (Théologie) introuvable, impossible de continuer.\")\n failed = true;\n}\n\nif (this.actor.itemTags.skill.find(i => i.name == \"Lore (Runes)\"))\n {\n let test = await this.actor.setupSkill(\"Lore (Runes)\", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n }\n else \n {\n this.script.notification(\"Compétence Savoir (Runes) introuvable, impossible de continuer.\")\n failed = true;\n }\n\n\n let test = await this.actor.setupSkill(\"Art (Tattooing)\", {appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n\n if (failed)\n {\n this.script.message(\"Un ou plusieurs Tests pour appliquer les tatouages ont échoué.\")\n return false;\n }\n else\n {\n return true;\n }","bQyVajMN1ETwlzvM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\nlet target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n data.system.specification.value = target.result\n this.script.notification(target.result);\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bRiFHPC1StKxqNIC":"if (isNaN(parseInt(this.item.system.specification.value))) {\n let value = await ValueDialog.create({title : \"Valeur de Robustesse\", text : \"Entrez la valeur de Robustesse\"});\n if (value) {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","bRtZH0xRh8dgqMeW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bT4gLrE3W36DIP4k":"if (args.applyAP && args.modifiers.ap.metal && args.alreadyPenetrating)\n {\n args.modifiers.ap.ignored += 1\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore +1 PA d'armure en métal\");\n args.modifiers.ap.metal--;\n }","bWr8leucbWslBCYG":"return args.characteristic != \"s\"","bgLeMqihLya2iobP":"const river = this.actor.itemTags.template.find(t => t.name === \"River Troll\");\n\nif (!river) {\n args.options.abortItemCreation = true;\n this.script.notification(\"Peut seulement être appliqué à un Troll des Rivières.\", 'warning');\n}","bidoOQSAofp4NPf6":"return args?.skill?.name !== game.i18n.localize(\"NAME.Cool\")","bkbWgG9COvZWZbAX":"args.context.addChargingDice = true;","brNRqfpPqD2Ki0cM":"args.prefillModifiers.modifier -= 10","btPrQkGRKUkhNe3N":"return args.skill?.name == \"Métier (Apothicaire)\"","bwtQOSWn120NICkf":"let test = await this.actor.setupCharacteristic(\"ag\", {fields : {difficulty : \"hard\"}});\nawait Test.roll();\n\nif (Test.Échoué)\n{\n await this.actor.addCondition(\"bleeding\")\n await this.actor.addCondition(\"entangled\")\n}","bzaoWcieMFaU5B5l":"return !this.actor.flags.useless[this.item.system.location.key] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","c31hjp7k0hlpdGBC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","c7HTWfg3CbjN9e1M":"this.actor.name = this.actor.name.replace(\"Common Troll\", \"Troll\");","c9xxdOCaQSwooK8n":"if (!this.actor.has(\"Bénédiction de Bataille\",\"prayer\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.ElmLfnrXliStS9CP\", this.effect)","cAioHYtlxuOCwRLh":"let ablaze = Number(args.opposedTest.attackerTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","cApfxL7Ic0NKdoSr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cBSy9CR5NZvcLRg8":"\n args.prefillModifiers.modifier += 0;\n args.prefillModifiers.slBonus += 0;\n args.prefillModifiers.successBonus += 0;\n ","cC7jjJDSVPi5BJUq":"if (this.item.equipped.value) {\n this.actor.system.status.addArmour(1, {source: this.effect})\n}","cDBhmHn5kjgWBAlT":"let num = (this.effect.sourceTest.result.overcast.usage.other.current || 1)\n\nthis.actor.addCondition(\"entangled\", num)","cEg09bnvZD6Ysnpc":"let item = await fromUuid(\"Compendium.wfrp4e-archives2.items.anIlqJXFOIEzIOo1\")\nlet data = item.toObject();\ndata.name = this.item.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cJFDnq1HI4gXWcJo":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text: \"Entrez la valeur de Protection\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\n{\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\n\tif (args.wardRoll >= args.ward && args.ward > 3)\n {\n let newWard = Math.max(3, args.ward - 1)\n this.script.message(\"Protection améliorée à \" + newWard)\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\n }\n\n}","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\n\nthis.actor.system.characteristics.s.modifier += sl * 10;\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\nlet data = item.toObject();\n\nif (this.item.name.includes(\"(\"))\n{\n\tgroup = this.item.parenthesesText\n}\n\nelse\n{\n\tgroup = await ValueDialog.create({text : \"Entrez le Groupe de Haine\", title : \"Groupe de Haine\"})\n\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(\"Cible\", group);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cW8ZuQ9YIUG5uvhf":"return args.characteristic != \"t\";","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\n{\n args.item.cn.value -=2\n if (args.item.cn.value < 0)\n args.item.cn.value = 0\n}","cZVrzR4fxV86lxNW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yrkI7ATjqLPDTFmZ\")\nlet res = item.toObject();\nres.system.specification.value = 1;\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\")\nlet ss = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [res, ss], {fromEffect : this.effect.id})","cgmA2N0MkjA7qIZy":"return args.type != \"cast\" || args.item?.system.lore?.value != \"shadow\"","ch5SD2XOQfcYo0X5":"if (args.sizeDiff <= -2 && args.opposedTest.attackerTest.result.critical)\n args.damageMultiplier = Math.abs(args.sizeDiff)\n\n let sBonusDiff = args.opposedTest.defenderTest.actor.characteristics.t.bonus - args.opposedTest.attackerTest.actor.characteristics.s.bonus\n let weapon = args.opposedTest.attackerTest.item\n if (sBonusDiff > 0 && weapon && weapon.damage.value.includes(\"SB\"))\n {\n args.damage += sBonusDiff\n args.breakdown.other.push({label : this.effect.name, value : sBonusDiff});\n }","chUpiI3el8IO8MSs":"if (args.opposedTest.attackerTest.item?.name.includes(\"Morsure\"))\n{\n let woundsGained = args.totalWoundLoss;\n this.script.message(`Gains ${woundsGained} Wounds`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n this.actor.modifyWounds(woundsGained)\n}","cipTp0OS2bfKLjZS":"if (args.totalWoundLoss > 0) {\n await args.actor.addCondition(\"bleeding\")\n await args.actor.addCondition(\"poisoned\")\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","clO7l82UYMJ4XVks":"args.context.giantbane = true","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cxgGYbuiXM3NxIOI":"if (args.test.options.flags.skewering)\n{\n args.test.preData.roll = 1;\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","czZI8S09By0Mqlsr":"return (args.skill?.name == undefined || args.item?.skillToUse?.name != args.skill?.name)","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\nthis.actor.characteristics.i.bonus = 1;\n\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\n{\n skill.system.total.value= Math.min(skill.system.total.value, 10)\n}","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dEx8xfG7VLbN69Ha":"if (!this.item.system.properties.flaws.reload) return;\n\nconst minReload = this.item.system.properties.qualities?.salvo ? 1 : 0;\nconst originalReload = this.item.system.properties.flaws.reload.value;\nconst runesOfReloading = Number(this.item.effects.contents.filter(e => e.name == this.effect.name).length);\nconst newReload = Math.max(originalReload - (2 * runesOfReloading), minReload);\n\nif (newReload) {\n this.item.system.properties.flaws.reload.value = newReload;\n this.item.system.properties.flaws.reload.display = `${game.i18n.localize(\"PROPERTY.Reload\")} ${newReload}`;\n}\nelse {\n delete this.item.system.properties.flaws.reload\n}","dIxYt421K010eogY":"\n let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n args.abort = \"Missed - Headless\"\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Ribs\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","dMeSZGdvw7zlnUKh":"return args.characteristic != \"wp\" && !args.context.terror && !args.extendedTest?.flags.wfrp4e?.fear","dULCkRxtisuzQyuK":"if (args.options.condition) \n this.effect.delete();","dVF5ywnzeiZQx9ke":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) \n{\n\tthis.script.scriptMessage(await this.actor.applyBasicDamage(15, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n}","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\n let days = new Roll(injury.system.duration.value).evaluateSync().total\n let num = 1 + Number(this.effect.sourceTest.result.SL);\n let roll = await new Roll(num+'d10').roll()\n await roll.toMessage(this.script.getChatData())\n let newDays = Math.max(days - roll.total, 1)\n this.actor.updateEmbeddedDocuments(\"Item\", [{_id: injury.id, 'system.duration.value': newDays} ])\n let message = \"Blessure réduite à \"+newDays+\" (-\" + roll.total + \") au lieu de \"+days\n this.script.message(message)\n}\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\n}","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\nconsole.log(this.actor);\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\n\nsense.name += \" (Sight)\";\nsense.system.tests.value = sense.system.tests.value.replace(\"Sense\", \"Sight\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\n}","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\n\nthis.actor.update({\"system.status.fate.value\" : current + 1})\n\nthis.script.message(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`)","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.ag.value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","dr9VJKGY3TeGuzXj":"this.script.message(`Allies of ${this.actor.name} gain +20 Initiative for the first round.`)","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\n args.fields.slBonus += 2;\nelse\n args.fields.slBonus -= 2;","dxt3p07po06J9fO1":"const metal = () => {\n for (const [key, loc] of Object.entries(this.actor.armour)) {\n if (!loc.layers) continue;\n\n for (const layer of loc.layers) {\n if (layer.metal)\n return true;\n }\n }\n\n return false;\n};\n\nargs.fields.slBonus -= metal() ? 2 : 1;","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\n\nawait args.actor.addCondition(\"ablaze\", 2);\nawait args.actor.addCondition(\"prone\");","e0eKVlOSk3Vw1HiD":"return args.characteristic != \"wp\" || args.type != \"characteristic\"","e2JlsKoW8oaFjn6Y":"const roll = new Roll(\"1d10\");\n\nawait roll.evaluate();\nroll.toMessage();\n\nconst slBonus = Number(this.effect.sourceTest.result.SL) + roll.total;\n\nthis.effect.setFlag(\"wfrp4e\", \"slBonus\", slBonus);","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`)\n}","e3dBud1keWyhw6nw":"const stupid = this.actor.items.find(i => i.name === \"Stupidee\");\n\nif (!stupid) return;\n\n\nif (this.item.system.disabled) {\n await stupid.update({\"system.disabled\": false});\n} else {\n await stupid.update({\"system.disabled\": true});\n}","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n this.script.message(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`)\n}","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","eC61buStv62b3sN9":"args.fields.slBonus += 8;","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eIiiDhJohYez26qY":"const {targetUuid} = this.effect.flags.wfrp4e;\n\nif (args.actor.uuid !== targetUuid) return;\n\nconst recordedWounds = this.effect.getFlag(\"wfrp4e\", \"damageToReturn\");\n\nif (!recordedWounds) return;\n\nargs.modifiers.other.push({label: this.effect.name, value: recordedWounds});\nargs.totalWoundLoss += recordedWounds\n\nthis.effect.unsetFlag(\"wfrp4e\", \"damageToReturn\");","eLxdRg8LX3AdYSEq":"let sumArmour = 0;\nfor (let key in this.actor.system.status.armour) {\n let armour = this.actor.system.status.armour[key];\n sumArmour += Number(armour?.value || 0);\n}\nlet damage = Math.floor(Number(sumArmour)/2);\nif (damage > 0 ) { \n\tthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n}","ePPgxQOqL1Uhz2k9":"let addOption = await foundry.applications.api.DialogV2.confirm({\n window : {title : \"Option\"},\n content :\n `\n Ajouter une option?\n

\n Projectile (Arc) +10 et un Arc long avec 12 flèches\n

\n `,\n})\n\nlet choice = []\n\nif (addOption)\n{\n choice = [\n {\n type : \"skill\",\n name : \"Projectile (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Arc long\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche\",\n }\n ];\n}\n\n\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","ePv2YYcr4lz3AkGu":"args.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier = 0","eRVVn8YtU8nnOW2q":"await this.actor.addCondition(\"prone\");\n\nconst test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty: \"difficult\"},\n context: {\n failure: `Encaisse 8 dégâts.`,\n success: `Encaisse 4 dégâts.`\n }\n})\n\nawait test.roll();\nconst damage = test.failed ? 8 : 4;\n\nawait this.actor.applyBasicDamage(damage, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, loc: \"roll\"});","eTHJSRutCEpuyPkR":"return args.weapon?.system?.attackType !== \"melee\" || game.settings.get(\"wfrp4e\", \"useGroupAdvantage\")","eViKAYOtuaOqo6c7":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.ConsumeAlcohol\"))","eWWLmA2xINR321aK":"args.item.system.qualities.value.push({name : \"magical\"})","eWvHTkxsjKuH2IKm":"const luck = Number(this.item.qualities.value.filter(v => v.key == \"luck\")[0].description)\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.u0CFf3xwiyidD9T5\")\n\nfor (let i = 0; i < luck; i++) {\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (this.item.system.location.key == \"rArm\")\n{\n\tdata.system.location.value = \"Right Hand\"\n\tdata.system.location.key = \"rHand\"\n}\nelse if (this.item.system.location.key == \"lArm\")\n{\n\tdata.system.location.value = \"Left Hand\"\n\tdata.system.location.key = \"lHand\"\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Yield or die!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.script.notification(\"Ajout de \" + data.name);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\ngame.wfrp4e.utility.postPeur(2, this.actor.prototypeToken.name)","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\nif (trait && trait.name.includes(\"Morsure\") && woundLossEffect)\n{\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\n}","egc02UIueJgEQMqx":"args.context.kingship = true","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\nlet data = item.toObject();\ndata.name += \" (Ennemi)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eieFcF4BxIvDTN3C":"args.abort = `Cannot perform Projectiles Attacks within ${this.effect.name}`;","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\nuses++;\nthis.script.notification(`Utilisé ${uses} fois`)\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effect.update({\"system.transferData.type\" : \"other\"})\n\tthis.script.notification(`Utilisé`);\n}\n","eq32dKXeTAbKhhLf":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\", Math.max(1, parseInt(args.opposedTest.attackerTest.result.SL) + 1))\n}","eqxE7nBO13yJS7hc":"let roll = (await new Roll(\"1d10\").roll())\nroll.toMessage({flavor: \"Blessures soignées\", speaker : {alias : this.actor.name}})\n\nthis.actor.modifyWounds(roll.total)\n\nthis.actor.hasCondition(\"bleeding\")?.delete();","esuLwq4g5T8k1kLT":"await args.actor.addCondition(\"ablaze\"); await args.actor.addCondition(\"prone\");","eu4mHsdZukvUEAGJ":"let token = this.actor.getActiveTokens()[0]?.document;\nif (!token) {\n token = this.actor.prototypeToken\n}\nif (args.equipped) {\n this.effect.setFlag(\"wfrp4e\", \"lightData\", token.light);\n token.update({\n light: {\n \"alpha\": 0.8,\n \"angle\": 360,\n \"bright\": 5,\n \"color\": \"#a33c0f\",\n \"coloration\": 1,\n \"dim\": 20,\n \"attenuation\": 0.5,\n \"luminosity\": 0.5,\n \"saturation\": 0,\n \"contrast\": 0,\n \"shadows\": 0,\n \"animation\": {\n \"type\": \"torch\",\n \"speed\": 8,\n \"intensity\": 4,\n \"reverse\": false\n }\n }\n })\n}\nelse {\n token.update({light: this.effect.getFlag(\"wfrp4e\", \"lightData\")});\n}","eyrUJQAuHvdllCwi":"args.context.flags.skewering = true;\nthis.effect.update({disabled: true});","ezGqDoC9hNRBnFTB":"let choices = await Promise.all([warhammer.utility.findItemId(\"1zaqojk0Oq1m8vYv\"), warhammer.utility.findItemId(\"zIuarD5mB0EF0ji0\")])\nlet items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une arme\")\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => i.system.equipped.value = true);\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","f29Pv6TQtgILxt1h":"if (args.test.options.healWounds) {\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\n let wounds = this.actor.characteristics.int.bonus + ~~args.test.result.SL\n if (args.test.options.fieldDressing && args.test.result.reversed)\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`${this.actor.name} guéri ${wounds} Blessures du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n}","f4vvAGQ8OGoEbrgy":"let SL = args.opposedTest.attackerTest.result.SL - args.opposedTest.attackerTest.item.cn.value\nlet difficulty = \"challenging\"\nif (SL >= 1)\n difficulty = \"difficult\"\nif (SL >= 2)\n difficulty = \"hard\"\nif (SL >= 3)\n difficulty = \"vhard\"\n\n\nlet test = await args.actor.setupCharacteristic(\"wp\", {fields: {difficulty}, skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Reçoit un état Sonné\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n args.actor.addCondition(\"stunned\");\n}","f6WnrJvoNkfoNN9Y":"return args.item?.attackType != 'melee'","f7WZvYle9iqefRsh":"return args.weapon?.system?.attackType != \"melee\"","f8cnfvGKJH3bYVGN":"return [\"s\", \"t\"].includes(args.characteristic)","fA1dIV1ANo4RVEqy":"if (args.equipped) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4mF5Sp3t09kZhBYc\");\n let champion = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [champion], {fromEffect : this.effect.id})\n} \nelse \n{\n this.effect.deleteCreatedItems();\n}","fC4KcY9S6V30IJyX":"args.context.supercharge = true;","fEFfHFeJxkR0aIJK":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 3 && args.opposedTest.result.winner == \"attacker\")\n{\n this.script.message(`Quiconque dans un rayon de 6 mètres per 1 Blessure and doit effectuer un test Difficile (-10) de Résistance ou recevoir un état @Condition[Deafened]`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","fEyKQqCjDwml3DXO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","fFGuTi0HLjwneMcJ":"return args.item?.system.isProjectiles","fFi9JD4uCY9DPC5B":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.characteristics.t.initial += 10 * specification;\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","fIUxKZMWJ8HMPmH9":"return [\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","fLg90csmdOOKmEE6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 16\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\")\nlet data = item.toObject();\ndata.system.specification.value = 8\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","fNUiKELi9e1vg7KY":"args.actor.removeCondition(\"fatigued\", 99);\nargs.actor.removeCondition(\"bleeding\", 99);","fPKYkBllp7Et62lX":"if (args.test.spell.name == \"Warp Lightning\")\n{\n args.test.preData.reversal = {allowed : true, if: \"better\"};\n}","fSDFCHAo97RLpwGU":"const hitLocation = args.test.hitloc.result\nconst hitLocationArmour = args.test.targets[0].armour[hitLocation]\n\nif (hitLocationArmour.layers.length > 0) {\n hitLocationArmour.layers.forEach(layer => {\n layer.source.system.qualities.value = [];\n layer.impenetrable = false;\n });\n}","fSTjJIqg5tvbwxKt":"const uuid = \"Compendium.wfrp4e-core.items.Item.ahlxlfIl8xUhBkic\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.name = this.effect.name;\ndata.system.equipped.value = true;\n\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\neffectData.disabled = false;\ndata.effects = [effectData];\n\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","fTw3mpSUOlkqVVUC":"this.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","fUD4gMdKe6P3sFdJ":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.Zh68gzYMLW8vZgVo\", this.effect)","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","faRFSsrQylQRZFLk":"return args.bleedingHand || !args.weapon || !this.actor.hasCondition(\"bleeding\")","fcY3pa72dELnOFXV":"return !args.context.reload\n","feMPZhhFeXRtKdKY":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectUuids : this.item.effects.contents[0]?.uuid})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","ffvcCEazZBinHlUX":"args.update({texture : {tint : \"#FFD700\"}});\n","fiF9sM5UpcHMYa33":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += \" (Poison, Disease, Chaos)\"\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect: this.effect.id})","fkFmNcesqqNTMhVn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.2iult41Jehz0F1O8\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","fl762icfKrt9ear2":"this.actor.removeCondition(\"broken\", parseInt(this.effect.sourceTest.result.SL)+1)","fq2fqlWlrVfitkcB":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : -200,\n \"s\" : 20,\n \"t\" : 20,\n \"i\" : 0,\n \"ag\" : -5,\n \"dex\" : -5,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet traits = [ {name:\"Corruption\"}, {name:\"Insensible à la douleur\"}, {name:\"Stupidee\"}, {name:\"Nuée\"}, {name:\"Bestial\", disabled : true}, {name:\"Régénération\", disabled : true}, {name:\"Taille\", value: \"Large\", disabled : true}, {name:\"Territorial\", disabled: true} ];\nlet items = [];\n\nlet updateObj = this.actor.toObject();\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let trait of traits)\n{\n let traitItem = await game.wfrp4e.utility.find(trait.name, \"trait\")\n if (traitItem)\n { \n let t = traitItem.toObject();\n t.system.specification.value = trait.value;\n if (trait.disabled)\n {\n t.system.disabled = true;\n }\n items.push(t);\n }\n else \n {\n ui.notifications.warn(`: -200\n}\nlet traits = [ {name:`, {permanent : true})\n }\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n","ft0LaRWZT5WtnptP":"let advantage = this.actor.system.status.advantage.value;\nif (advantage > 0)\n{\n await this.actor.setAdvantage(0);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item, {fields : {slBonus : advantage}})\nawait test.roll();","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","fwiBeetIsvpXKtUc":"scatter = await game.wfrp4e.tables.rollTable(\"scatter\");\n\nif (scatter.roll == 9 || scatter.roll == 10)\n{\n this.script.message(`${scatter.roll}: Failed to Scatter`);\n}\nelse \n{\n this.script.message(scatter.result);\n}","fyjYWg7ekj8JJcmq":"if (args.test.result.misfire || args.test.result.fumble)\n{\n args.test.result.other.push(`${this.effect.name}: can be used to Negate Fumble / Raté Effects`)\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\nawait roll.toMessage(this.script.getChatData());\nthis.script.notification(`Healed ${roll.total} Wounds`)\nthis.actor.corruptionDialog(\"moderate\")\nawait this.actor.modifyWounds(roll.total)","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Groupe social)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let group = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\n }\n else\n {\n let value = await ValueDialog.create({text : \"Entrez le Groupe d'Étiquette\", title : this.effect.name});\n if (value)\n {\n name = `${name.split(\"(\")[0].trim()} (${value})`\n tests = this.item.system.tests.value.replace(\"Groupe social\", value);\n }\n }\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \n// of the target point is splashed with mystic poison, \n// suffering 1d10 + SL damage which ignores Armour Points\n\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\n\nawait damage.toMessage(this.script.getChatData())\n\nthis.script.message(await args.actor.applyBasicDamage(\n damage.total,\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\n))\n\n// ... and gains the Poisoned Condition\n\nthis.actor.addCondition(\"poisoned\")","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\n amberTalons.name = \"Serres d'ambre\";\n amberTalons.img = this.effect.img;\n amberTalons.system.damage.value = \"SB + WPB\"\n amberTalons.system.equipped = true;\n amberTalons.system.qualities.value.push({name : \"magical\"})\n amberTalons.effects.push({\n name : \"Serres d'ambre\",\n transfer: false,\n img : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\n system: {\n transferData : {\n documentType : \"Item\"\n },\n scriptData : [{\n trigger : \"applyDamage\",\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\n }]\n }\n })\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","g5y0tdoHCDs7cBy7":"return ![\"NAME.Résistance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name) \n || !this.actor.sameSideAs(this.effect.sourceActor)\n || this.actor.system.details.status.tier !== \"b\"","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\n{\n e.update({disabled: false})\n}\nthis.script.notification(\"Reset Powers\")","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrez la Force du Venin\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.difficultyNames));\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\n\nif (value === 0)\n args.actor.system.status.mood.value = 0;\nelse if (value !== undefined)\n args.actor.system.status.mood.value += value;","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\n args.Test.preData.reversal = {allowed: true, if: \"better\"};","gQJJaxbN83KSgi36":"if (!args.totalWoundLoss) return\n\nconst roll = await new Roll(\"2d10\").roll();\nroll.toMessage(this.script.getChatData());\n\nargs.attacker.applyBasicDamage(Number(roll.total), { loc: \"roll\" })","gSDhsSB8573joL64":"if (args.equipped) {\n const spell = await game.wfrp4e.utility.findItem(\"Vindictive Glare\", \"spell\");\n const skillUUID = \"Compendium.wfrp4e-core.items.Item.e3McIND4Rrsn5cE6\";\n\n await this.actor.addEffectItems([skillUUID, spell.uuid], this.effect, [{\n \"system.advances.value\": 75 - this.actor.system.characteristics.int.value\n}, {}]);\n} else {\n this.effect.deleteCreatedItems();\n}","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\n","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\n{\n \n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\n args.actor.addCondition(\"ablaze\")","goz8yTlMozlsz3uY":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Strength';\nconst difficulty = 'easy';\nconst target = 10;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\nif (turns <= 0) return;\nturns--;\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\nconst target = canvas.scene.tokens.get(targetId);\n\nif (turns > 0) {\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\n\n return this.script.message(`

${speaker.alias} continue de s'enrouler autour de ${target.name}. Il pourra commencer à écraser dans ${turns} tours.

`);\n}\n\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\n this.script.message(`

${speaker.alias} peut reprendre l'écrasement de ${target.name} avec le Test Étendu.

`);\n return;\n}\n\nconst extendedTestData = {\n name: this.effect.name,\n type: \"extendedTest\",\n img: this.effect.img,\n system: {\n SL: {\n current: 0,\n target: target.actor.system.status.Blessures.value\n },\n Test: {\n value: 'Strength'\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: \"challenging\"\n }\n }\n};\n\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\nconst extendedTest = extendedTests[0];\n\nthis.script.message(`

${speaker.alias} a fini de s'enrouler autour de ${target.name}. Il peut maintenant commencer à écraser via le Test Étendu @UUID[${extendedTest.uuid}].

`);\n\nlet effet = {\n name: extendedTest.name,\n img: extendedTest.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: extendedTest.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.effects.find(e => e.id === id);\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\n const target = canvas.scene.tokens.get(targetId);\n this.script.message(\\`

${speaker.alias} a écrasé ${target.name}. Le bateau se brise, réduit à un amas d'épaves.

\\`);\n await effet.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n}\n\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","gull3qgCahzk2xYu":"this.actor.addCondition(\"fatigued\", parseInt(this.effect.sourceTest.result.SL))\n\nlet test = await this.actor.setupSkill(\"Calme\", {fields : {difficulty: \"challenging\"}, appendTitle : ` - ${this.effect.name}`});\n\nawait test.roll();\n\nif (test.failed)\n{\n\tthis.actor.addCondition(\"broken\");\n}","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\nargs.fields.slBonus -= specification;","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\nconst item = await fromUuid(uuid);\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","h4lnexDYAhyQuiR5":"if (args.test.isCritical && args.test.weapon.properties?.qualities?.impale) {\n let targets = args.test.targets.filter(t => t.system.details.move.value > 1);\n if (targets.length > 0) {\n targets.forEach(target => {\n target.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n });\n args.test.result.other.push (`${this.effect.name}: Target Move Reduced by 1`)\n }\n}","h766UvswLCsxcMow":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : -15,\n \"t\" : 0,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 5,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charme\", \"Intimidation\", \"Mêlée (Base)\"]\nlet skillAdvancements = [7, 60, 7]\nlet talents = [\"Menaçant\", \"Discret\"]\nlet traits = [\"Perturbant\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","h8JqPMh2mM2uhpxk":"if (args.item.system.tags.has(\"armour\"))\n{\n \nfor(let key in args.item.system.AP)\n{\n if (args.item.system.AP[key])\n {\n args.item.system.AP[key] += 2;\n }\n }\n}","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\nthis.script.message(`Recoit l'état @Condition[Nausea] pour [[1d10]] heures`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\n\nwoundsGained = Math.floor(woundsGained / 2)\n\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\n\nthis.script.message(`Gains ${woundsGained} Wounds`)","hEDuYAgc1O1zG3Rr":"return args.targets[0].actor.appliedEffects.filter(e => e.name == game.i18n.localize(\"Flying\")).length > 0","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","hL3JUSY3xMA4zj2Q":"if (this.sourceActor.uuid === this.actor.uuid) return;\n\nconst test = await this.actor.setupCharacteristic(\"t\", {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {\n difficulty: \"difficult\"\n },\n context: {\n success: \"Est capable de se relever !\",\n failure: \"Est tombé à terre !\",\n }\n});\n\nawait Test.roll();\nif (Test.failure) {\n await this.actor.addCondition(\"prone\");\n}","hO2CFW9hygGSYuJ2":"return args.target?.Species == this.effect.specifier;","hObTbWi4ZdwXimIW":"if (args.item.type == \"spell\")\n{\n args.item.system.cn.value = Math.floor(args.item.system.cn.value / 2);\n}","hOgha3ir8K9TVphO":"return args.characteristic !== \"fel\";","hSImyYjL0CENTvXf":"let test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\", appendTitle : ` - ${this.effect.name}`}});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg = ``\nlet armour = args.actor.itemTags.armour.filter(i => i.system.isMetal && i.system.isEquipped);\nfor(let item of armour)\n{\n\tfor(let key in item.system.AP)\n\t{\n\t\tlet AP = item.system.AP[key]\n\t\tlet damage = Math.floor(AP / 2);\n\t\tawait item.system.damageItem(damage, [key]);\n\t}\n\tmsg += `

${item.name} PA réduit de moitié

`\n}\nif (msg)\n{\n\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hTsnYKgw0kK10PiC":"args.fields.modifier += 5","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\n{\n\twarhammer.utility.sleep(200).then(() => {\n\t\tthis.script.message(\"Tirage possible sur la table @Table[crithead]{Coups critiques à la tête} au lieu de de la localisation normale.\")\n\n\t})\n}","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hadXFC43VKyrE9jC":"this.actor.addEffectItems([\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\", \"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\"], this.effect);","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","hg89FU1NAp8tIsgO":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"))","hhCs5VBKx50S5IsY":"return !args.context.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = [\"Calme\", \"Esquive\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Réflexes de Combat\"]\nlet trappings = [\"Veste en cuir\", \"Casque en cuir\", \"Jambières en cuir\", \"Bouclier\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hlHKeFWrOA8CsLr9":"args.data.reversal = {allowed : true, if: \"success\"};\nargs.context.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.
`\n if (this.actor.status.wounds.value <= 1)\n {\n msg += `${this.actor.prototypeToken.name} goes unconscious.
`\n await this.actor.addCondition(\"unconscious\")\n }\n this.script.message(msg)\n this.actor.modifyWounds(-1)","hpbraeEbjkXnmD75":"args.fields.hitLocation = \"lLeg\"\nargs.fields.modifier += 20;","hpwJRAhCsXTp9bd9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Armes d'hast)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"skill\",\n name : \"Corps à corps (A deux mains)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice = await foundry.applications.api.DialogV2.wait({\n window : {title : \"Choix\"},\n content :\n `

\n Sélectionnez votre choix\n

\n
    \n
  1. Corps à corps (Base)
  2. \n
  3. Corps à corps (Armes d'hast)
  4. \n
  5. Corps à corps (A deux mains)
  6. \n
\n `,\n buttons : [\n {\n label : \"Base\",\n action : \"basic\",\n callback : () => {\n return choice1\n }\n },\n {\n label : \"Armesd'hast\",\n action : \"polearm\",\n callback : () => {\n return choice2\n }\n },\n {\n label : \"A deux mains\",\n action : \"two-handed\",\n callback : () => {\n return choice3\n }\n }\n ]\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","hqMwzPozAVTzoCxa":"if ((args.test.result.roll % 11 == 0 || args.test.result.roll == 100) && args.test.failed)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"torpedo\"\n }\n}","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)\n args.actor.system.details.move.sail.value -= 1;\n","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Duration)\n if (Number.isNumeric(range))\n {\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\n }\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n let damage = this.effect.sourceTest.result.damage\n\n this.script.message(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","hxmwtw5zAHyS2upG":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Ajouter PA de métal aux Dégâts\" })\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignorer Métal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","i93PGV1lDSdi3BJu":"let effectsToDisable = this.actor.items.filter(i => i.type == \"disease\").reduce((effects, item) => effects.concat(item.effects.contents), []).concat(this.actor.effects.contents.filter(i => i.isCondition)).filter(i => i.active);\n\nif (effectsToDisable.length)\n{\n this.script.notification(`Disabling ${effectsToDisable.map(i => i.name).join(\", \")}.`);\n effectsToDisable.forEach(i => i.update({disabled : true}))\n}","iAo3wxMLA64rsKjj":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","iH9o7t8vGDn6pm1d":"if (args.test.result.misfire && args.test.result.roll % 2 == 1 && args.test.result.roll % 11 == 0) {\n delete args.test.result.misfire\n}\nelse if (args.test.result.misfire)\n{\n delete args.test.result.misfire;\n args.test.result.tables.misfire = {\n label : \"Raté\",\n class : \"fumble-roll\",\n modifier : 0,\n key : \"artillery-misfires\"\n }\n}","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.s.bonus\ndata.system.description.value = \"\"\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\n}","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\n\nthis.script.message(`this.actor.prototypeToken.name healed ${healed} Wounds`);\n\nthis.actor.modifyWounds(healed)","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\n\n\nlet opposedResult = Test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n let spells = this.actor.itemTypes.spell;\n if (spells.length)\n {\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\n this.script.message(`Perd l'accès à ${chosen.name}`)\n chosen.update({name : chosen.name += \" (PERDU)\"})\n }\n}\n","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\n let staunch = ~~args.test.result.SL + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n args.test.result.other.push(`${this.actor.name} guérit ${staunch} états Hémmoragie du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\n\nif (result.object.documentId && result.object.documentCollection)\n{\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\n if (item)\n { \n let data = item.toObject();\n // Some items need sourceTest for their effects\n foundry.utils.setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\n }\n}\n\nthis.script.message(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.notification(\"Immunisté à la Peur\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}\nreturn args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","ij3BLXzNk7eZ3V95":"return ![\"s\",\"t\",\"wp\",\"fel\"].includes(args.fields.characteristic)","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\n// or the state of being Stinking Drunk are eliminated.\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\n\n// The drinker is thereafter Fatigued\n// for a number of hours equal to 10 minus their Toughness Bonus —\n// nothing but time and rest can eliminate this penalty.\nawait this.actor.addCondition(\"fatigued\")\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\nthis.effect.updateSource({\"duration.rounds\" : duration});\nthis.script.message(`

${this.actor.prototypeToken.name} n'a plus de pénalités liées à l'alcool et gagne l'état Extenué pendant ${duration} heures.

`,\n{\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n})","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Magie des Arcanes (Feu)\"))\n{\n this.actor.addCondition(\"ablaze\");\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\n{\n\targs.flags.amputatedFootOrLeg= true;\n\targs.fields.modifier -= 20;\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\nfor (let i=0; i [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\n\nlet choice = await ItemDialog.create(spells, 1, {text : \"Choisissez un Sort\", title : this.effect.name});\nif (choice[0])\n{\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\n}","iuoVkjFdL1rHdbqR":"return this.item.equipped.value && [\"weapon\", \"cast\"].includes(args.type)","ivxpmCKu3pEMG05c":"if (this.actor.inCombat)\n{\n\tthis.actor.characteristics.s.bonus += 2\t\t\n\tthis.actor.characteristics.s.calculationBonusModifier -= 2\n}","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\n{\n args.item.system.qualities.value.push({name : \"penetrating\"})\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\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]\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \n{\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Minor Exposure to Corruption}`\n )\n this.script.message(\n `${this.effect.name}: \n @Corruption[minor]{Minor Exposure to Corruption}
\n ${args.actor.prototypeToken.name} must take an \n Average (+20%) Corruption (Minor) Test`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","jC8o5PbnqEvOoZ9N":"this.actor.addCondition(\"poisoned\", 2)","jFKnf2UdoxAQx76R":"if (args.equipped)\n{ \n this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.URwIDtInCsxOoGqM\", this.effect);\n}\nelse \n{\n this.effect.deleteCreatedItems();\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\nwoundsGained = Math.ceil(woundsGained / 2)\n\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\n\nargs.actor.addCondition(\"fatigued\")\nargs.attacker.hasCondition(\"fatigued\")?.delete();\n\nthis.script.message(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\n\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\n{\n await broken.delete();\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\n this.script.notification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\n}","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\", true, [\"system.lore.value\"])\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\n\nlet choice = await ItemDialog.create(spells, 1, {text : \"Choisissez un Sort\", title : this.effect.name});\nif (choice[0])\n{\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}\n","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}","jOCLEsjNzERyVLsP":"if(args.test.result.majormis)\n{\n args.test.result.nullmajormis = game.i18n.localize(\"ROLL.MajorMis\")\n args.test.minormis = game.i18n.localize(\"ROLL.MinorMis\")\n}","jOSCsBRUO117spv8":"args.abort = `Only gunpowder or artillery weapons can attack targets within the ${this.effect.name}`;","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\n\targs.abort = `${this.effect.name}: Ignored`","jOm7RxGFm1y6mCpN":"return args.context.crewTest.name.includes(\"Batten Down\");","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.addImpact = true\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Ajouté\")\n }","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\n{\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\n\nthis.script.message(`

${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.

`);","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\nawait this.actor.addCondition(\"deafened\")\nawait this.actor.addCondition(\"fatigued\")","jb1ouw0eIBVy3Wwg":"if (\n this.item == args.attackerTest.item\n && args.attackerTest.succeeded \n && args.defenderTest.item?.system?.attackType == 'melee'\n && (args.defenderTest.item.properties.qualities?.magical || args.defenderTest.item.properties.unusedQualities?.magical)\n) \n{\n args.opposedTest.result.other.push(`${this.effect.name}: destroys magical ${args.defenderTest.item.name}.`)\n}","jbZPLb4wuqJpHLUx":"this.item.system.flaws.value.push({name : \"dangerous\"})","jdS2u1tQPYeO55WI":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif (type == \"cold\")\n{\n\tlet stunned = Math.max(1, Math.trunc(args.totalWoundLoss / 5))\n\tawait args.actor.addCondition(\"stunned\", stunned);\n}\n\nif (type == \"corrosion\")\n{\n let damageItems = await foundry.applications.api.DialogV2.confirm({window: {title : this.item.name}, content : `

Endommage tous les objets portés ?

`})\n\tif (damageItems)\n\t{\n\t\tlet msg = ``\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\n\t\tlet armour = args.actor.itemTags.armour.filter(i => i.isEquipped);\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\n\t\tfor(let item of weapons)\n\t\t{\n\t\t\tif (item.system.properties.qualities.shield)\n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1);\n\t\t\t}\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tfor(let item of armour)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tfor(let item of trappings)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `

${item.name} endommagé de 1

`\n\t\t}\n\t\tif (msg)\n\t\t{\n\t\t\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\n\t\t}\n\t}\n}\n\nif (type == \"fire\")\n{\n\tawait args.actor.addCondition(\"ablaze\");\n}\n\nif (type == \"electricity\")\n{\n\tawait args.actor.addCondition(\"stunned\");\n}\n\nif (type == \"poison\")\n{\n\tawait args.actor.addCondition(\"poisoned\");\n}\n\nif (type == \"warpfire\")\n{\n\tawait this.actor.corruptionDialog(\"moderate\")\n\tthis.actor.applyEffect({effectUuids : this.item.effects.getName(\"Warpfire\").uuid})\n}","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"poisoned\")","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}}));\n }\n else\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\n }\n}\nelse\n{\n this.script.notification(\"Aucun chemin d'image de token configuré. Le chemin de l'image doit être défini dans la première ligne de ce script.\", \"error\");\n}","jvNuIbOtB46p0esq":"if (args.test.item?.system?.attackType == \"melee\")\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.Test.result.description = \"Succès marginal\";\n\t\t}\n\t\targs.Test.result.outcome = \"success\"\n args.test.result.other.push(`${this.effect.name}: Minimum +0 SL`)\n\t}\n}","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\n let value = await ValueDialog.create({title : \"Valeur d'Armure\", text : \"Entrez la valeur d'Armure\"});\n if (value) {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","k1Wdehpgdc0hP63E":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet hatred = item.toObject();\nhatred.system.specification.value = \"Skaven\"\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.3wCtgMDNnu8MFmyk\")\nlet immunity = item.toObject();\nimmunity.system.specification.value = \"Poison\"\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.oRx92ByVNEBN6YkK\")\nlet berserk = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [hatred, immunity, berserk], {fromEffect : this.effect.id})","k465TgRelwcSUdS2":"if (this.actor.has(\"Métier (Ingénieur)\", \"skill\"))\n{\n let aim = await this.actor.setupSkill(\"Métier (Ingénieur)\", {appendTitle : ` - Aim ${this.item.name}`});\n await aim.roll();\n let SL = Number(aim.result.SL);\n let context = {}\n if (SL < 0)\n {\n context.fields = {modifier : 10 * SL};\n context.initialTooltip = \"Échoué Métier (Ingénieur)\";\n }\n\n let fire = await this.actor.setupWeapon(this.item, context)\n fire.roll();\n}\nelse\n{\n this.script.notification(\"Cet acteur n'a pas le Métier (Ingénieur)!\", \"error\");\n}","k5792iKWEqKmVZMk":"return args.weapon || args.skill?.name === \"Esquive\";","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\n{\n args.test.result.damage +=1 \n args.test.result.additionalDamage += 1\n}","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","kY50G53IXdNXX9Sc":"for(let e of this.item.effects)\n{\n if (e.name.toLowerCase().includes(\"rune\") && e.system.transferData.type == \"aura\" && e.system.transferData.area.radius == \"6\")\n {\n e.system.transferData.area.radius = \"12\"\n }\n}","kYTEqcs8JpO2OmB9":"if (args.equipped)\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.Bvd2aZ0gQUXHfCTh\", this.effect, {\"system.specification.value\": \"10\"});\nelse\n await this.effect.deleteCreatedItems()","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\nconst roll = new Roll(`2d10 - ${sin}`);\nawait roll.evaluate();\nawait roll.toMessage({flavor: `${this.effect.name}`});\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\nteeth = teeth.toObject();\n\nlet roll = await new Roll(\"1d10\").roll({allowInteractive : false});\nroll.toMessage(this.script.getChatData({flavor : \"Dents perdues\"}))\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kiolpXGbkmxfPiuI":"let test = this.actor.attacker?.test\nif (test && this.item.system.protects[test.result.hitloc.result] && test.result.critical)\n{\n this.script.message(`${this.item.name}: Blocked Critical Hit`)\n}","knq8lNYLw0v757dQ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.message(\"Immunisé à l'empoisonnement\")\n poisoned.delete()\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\nargs.actor.system.details.man -= 1;\nargs.actor.system.status.carries.max *= 1.5;","kvqJbHBvFr6iGLcI":"this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.3wCtgMDNnu8MFmyk\",null,[{\"system.specification.value\":\"Poison\"}])","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();","lDIWlQvD6MGyP3QP":"return this.effect.sourceActor.effects.filter(i => i.isCondition).length > 0","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","lG5lfAzNuM4t0rpM":"return args.skill?.name === \"Esquive\";","lII4KMRblqwFBlsV":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 15\n}\nlet skills = [\"Focalisation\", \"Charme\", \"Représentation (Danse)\"]\nlet skillAdvancements = [0, 6, 3]\nlet talents = [\"Attirant\", \"Distraire\", \"Imitation\"]\nlet traits = [\"Perturbant\", \"Flight (6)\", \"Spellcaster (Petty)\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Feux follets\", \"Sommeil\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","lMRsQRgjMexY9dxE":"return [\"NAME.Résistance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","lOIHiAIDtj91kllN":"const chanties = await warhammer.utility.findAllItems('wfrp4e-soc.chanty', \"Loading Chanties\", true);\nlet choice = await ItemDialog.create(chanties, 1, {text : \"Choisissez un Chant\", title : this.effect.name});\nif (choice.length) \n{\n this.actor.addEffectItems(choice.map(i => i.uuid), this.effect)\n}","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\nthis.script.notification(\"Added \" + item.name)","lQJ68n3y1xDyNicE":"return !args.context.sizeModifier && args.item?.system?.attackType != \"ranged\"","lRZhkh8pcu93QTKz":"if (args.test.spell)\n{\n\targs.test.preData.SL = -10\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n\nlet infectedData = infected.toObject();\nlet fearData = fear.toObject();\nfearData.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\nthis.script.message(msg)\nthis.actor.modifyWounds(-1)","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Résistance', {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 't',\n context: {failure: \"Mast shattered!\"}\n});\nawait test.roll();\n\nif (test.failed) {\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\n this.effect.update({disabled: true});\n}","laWHBP2jLrVxcgp9":"this.script.message(await this.actor.applyBasicDamage(2, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","laptAldsT0Fm1rDt":"let blunt = await foundry.applications.api.DialogV2.confirm({window: {title : this.effect.name}, content :`

Appliquer la réduction des dégâts contondants ? (-3)

`})\n\nif (blunt)\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts Contondants\", value : -3})\n}","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\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\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","lmBAZCtofsC8hHHG":"let SL = 1;\n\ndo {\n const signedSL = SL >= 0 ? `+${SL}` : \"SL\";\n const content = `\n
\n

Vous avez augmenté ${signedSL} ${SL > 1 ? \"DRs\" : \"SL\"}. Voulez-vous lancer un d10 ?

\n

1–6: ajoutez +1 DR

\n

7–10: perdez tous les DR accumulés et effectuez le test suivant à –1 DR

\n
\n`;\n const choice = await foundry.applications.api.DialogV2.confirm({\n yes: {label: \"Lancer\", icon: \"fas fa-dice\"},\n no: {label: `Keep ${signedSL} DR`, icon: \"fas fa-check\"},\n content,\n });\n\n if (!choice) break;\n\n const roll = new Roll(\"1d10\");\n await roll.toMessage({flavor: this.effect.name});\n\n if (roll.total >= 7) {\n SL = -1;\n break;\n }\n\n SL++;\n} while (true);\n\nthis.effect.setFlag(\"wfrp4e\", \"SL\", SL);","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","luEuwzYCUrch58Bp":"if (args.opposedTest.attackerTest.options?.grudge) {\n args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : 1}) \n}","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\nawait Test.roll();\n\nif (Test.Échoué)\n{\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\n let currentAge = parseInt(this.actor.system.details.age.value)\n\n let inline = `@ROLL`\n let msg =\n `

${this.actor.prototypeToken.name} ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses

\n

${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Compétence de Combat

\n

${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Compétence de Tir

\n

${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Force

\n

${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Endurance

\n

${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agilité

\n

${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dextérité

\n `\n this.script.message(msg);\n\n let characteristics = foundry.utils.duplicate(this.actor.system.characteristics)\n\n characteristics.ws.initial -= ws\n characteristics.bs.initial -= bs\n characteristics.s.initial -= s\n characteristics.t.initial -= t\n characteristics.ag.initial -= ag\n characteristics.dex.initial -= dex\n\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\n{\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\n if (slash)\n {\n slash.value = \"2A\"\n }\n}","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m4eagTrVOXtotonR":"// Get the size\nlet size = this.actor.sizeNum \nlet diff = \"difficult\";\nif (size < 5) { // 5 = Monstrous\n diff = \"hard\";\n}\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : diff}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n this.actor.addSystemEffect(\"fear\")\n}","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\nargs.prefillModifiers.successBonus++;\n","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\nconst item = await fromUuid(uuid);\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.context.reload","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","mJ9eMPub4epJSf00":"return args.weapon?.system.qualities.value.find(i => i.name == \"shield\") && this.actor.attacker","mPxmCsXYirAIT913":"let key = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.characteristics, this.effect.img), 1, \"Choisir la Caractéristique\");\n\nthis.effect.updateSource({changes : [{key : `system.characteristics.${key[0].id}.modifier`, mode : 2, value : 10}]})","mRvLsSVxNyt8LVZb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z\")\nlet data = item.toObject();\ndata.name += \" (Au choix)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","mT7PDcjF3cJTDbjR":"args.actor.system.details.move.value -= 1;\nargs.actor.system.status.carries.max *= 1.25;","mV4Tmc0yfpL09KV7":"args.actor.addCondition(\"entangled\")","mXvtf3qhJjshpopX":"return [\"weapon\", \"cast\", \"channelling\"].includes(args.type)","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\n{\n args.flags.trained = true;\n args.fields.modifier += 10;\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","mlulnXQo8XU8vKLD":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create({text : \"Entrer la valeur\", title : this.effect.name});\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","mnvczEiu7gUSWvuV":"if (args.test.options.flags.skewering)\n{\n args.test.result.tables.critical = {\n label : \"Critique (si attaque réussie)\",\n class : \"critical-roll\",\n modifier : args.test.result.critModifier || 0,\n key: `crit${args.test.result.hitloc.result}`\n\n }\n}","n5RJqJL9fdRIxkuN":"if (this.actor.system.status.advantage.value > 0)\n{\n await this.actor.modifyAdvantage(-1);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","n5wowuDE8Dz1uBZn":"let damage = this.effect.sourceActor.characteristics.int.bonus + 6;\nif (this.actor.has(game.i18n.localize(\"NAME.Mort-vivant\")) || this.actor.has(game.i18n.localize(\"NAME.Démoniaque\"))) { \n damage += 6\n}\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}));\n\nlet test = await this.actor.setupCharacteristic(\"int\", {fields : {difficulty : \"average\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) {\n\tthis.actor.addCondition(\"stunned\");\n}","n8X4Vgmrs4M5pyHK":"return !this.actor.isOpposing || this.actor.attacker.test.item.attackType != \"melee\" || !this.item.equipped.value","n99CqhPx3uABCU15":"if (args.test.result.critical && args.test.preData.reversal.allowed)\n{\n args.test.result.other.push(`${this.effect.name}: can reverse Critical Hit roll`)\n}","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\n{\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.message(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nNwAFEURKlFhPcvA":"CorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData());","nSXzktHyNjGUXjaw":"return args.item?.system.isProjectiles","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n args.fields.modifier -= 10;\n}\nelse if ([\"wp\"].includes(args.characteristic))\n{\n args.fields.modifier += 10;\n}","nZtN0zM49xTuG86V":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.notification(\"Avantage retiré\")\n}\nelse \n{\n return this.script.notification(\"Avantage retiré\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","naF5EWr1CBkYRZTK":"if (args.opposedTest?.attackerTest?.item?.system?.isProjectiles)\n{\n let choice = await foundry.applications.api.DialogV2.confirm({window: {title : this.item.name}, content : `

Annuler les dégâts avec ${this.effect.name}?

`})\n\n if (choice)\n {\n args.abort = `${this.effect.name}: Dégats annulés.`;\n }\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\n","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\n{\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\n}","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\n{\n this.script.message(`Infected: ${args.actor.name} must pass an Easy (+40) Résistance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","nkSmu7v9WiAaK4vq":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'easy';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n \n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.message(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils gagnent +50 aux tests de natation et peuvent respirer sous l'eau.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait Test.roll();\n\n// Kind of insane but whatever\nlet opposedResult = Test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nreturn opposedResult?.winner == \"attacker\";","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o2QhtiLAmUEpDgBX":"return args.skill?.name != \"Voile (Aéronavale)\"","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\n\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\n\nthis.script.message(`Gained ${points} Fortune Points`)","oA197GIqHpU5WR9V":"if (args.test.options.corruption || args.test.options.mutation)\n{ \n args.test.preData.canReverse = true;\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\n{\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let msg = `Rolled ${roll}.`\n if (roll >= 7)\n {\n msg = `Attack hits with an SL of ${roll - 6}.`\n }\n this.script.message(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","oHenUKtaS3jT5xQn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4xF7M6ylIiGntekh\")\nitem = item.toObject()\nitem.name = this.effect.name\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n","oHmtdXWVwm7y7BtO":"args.fields.difficulty = \"hard\";","oPg4se8iQRD14kmB":"let filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nlet items = await ItemDialog.createFromFilters(filters, 1, {text : \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"})\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => i.system.equipped.value = true);\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","oQI06eh8mJ9UqETO":"if (this.item.system.disabled) {\n await this.effect.deleteCreatedItems();\n} else if (!this.actor.items.find(i => i.name === \"Furtif\")) {\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.OzwDT6kzoLYeeR2d\", this.effect);\n}","oTXPA6rbPnYOKNmo":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Intuition\", \"Langue (Battle)\", \"Commandement\" , \"Savoir (Guerre)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 15, 30, 20, 20]\n\nlet talents = [\"Vigilance\", \"Maîtrise du combat\", \"Combat Instinctif\", \"Inspiring\", \"Chance\", \"Déterminé\", \"Inébranlable\", \"Seigneur de guerre\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n {name: \"Two Handed Weapon\", type: \"trapping\", trappingType: \"clothingAccessories\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nlet filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, {text: \"Choisissez une arme d'hast ou une arme à deux mains appropriée\"}))\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Ajouter Chaos Steed et +20 Conduite (Cheval) ?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\n\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\n\nthis.script.message(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} gain de @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] pour [[1d10]] heures`)\n }\n}","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\n\nfunction tinDifference(layers)\n{ \n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\n\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\n\n return metalAP - tinAP;\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","ohl803m0tUwNfKAk":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 5 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","okW06V9UiPC4Vcrn":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Calme\", \"Esquive\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Combat Instinctif\", \"Déterminé\"]\nlet trappings = [\"Veste de cuir\", \"Jambières de cuir\", \"Calotte de cuir\", \"Arme simple\", \"Lance\", \"Bouclier\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","okr3TtzpFoefUuJS":"let item = await fromUuid('Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX')\nlet data = item.toObject();\ndata.system.location.value = \"Collar Bone\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","oqgd9G6oI1ncPYLw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CV9btQn09S9Fn8Jk\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\nlet data = item.toObject();\ndata.name += \" (Woodlands)\";\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\n {\n args.actor.addCondition('ablaze')\n }","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\n\nif (criticals.length)\n{\n this.script.notification(\"Impossible de recevoir une Blessure Critique \");\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\n}\n\nif (foundry.utils.getProperty(args.data, \"system.status.wounds.value\") == 0)\n{\n this.script.notification(`Endormi pendant ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} tours`)\n}","pRp6hoBJ0JQa4NNG":"return args.item?.system?.attackType != \"ranged\" || this.actor.system.canFly.effects.filter(e => e.name != \"Flying\")[0].disabled","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\nargs.actor.system.details.move.value -= 1;","pdvCwjxHI56EmxuU":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sJ3yX1kvzu2hgNq5\")\nlet amphibious = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nlet as = item.toObject();\nas.name += \" (Sight)\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [amphibious, as], {fromEffect : this.effect.id})","pj7gjxHrnrZonC6U":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet data = item.toObject();\ndata.name = `${data.name} (Mort-vivant, Warm-bloods)`;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\n\nif (ablaze) {\n ablaze.delete();\n this.script.notification(\"Résistance à l'état En Flammes\");\n}","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","ppc8L3WtIx6JzlAd":"if (args.equipped) {\n await this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.mDgEMOoJpi8DkRYb\", this.effect);\n} else {\n this.effect.deleteCreatedItems()\n}","pqQkeUVpuZ0jOKnZ":"const tables = [\n game.wfrp4e.tables.findTable(\"mutatephys\"),\n game.wfrp4e.tables.findTable(\"mutatephys\", \"Khorne\"),\n];\n\nif (!tables.length) {\n return ui.notifications.error(\"Table de Mutation introuvable, veuillez vous assurer qu'une table avec la clé `mutatephys` est importée dans le monde.\");\n}\n\nconst values = {}\n\nlet i = 0;\nfor (const table of tables) {\n values[i] = table.name;\n i++;\n}\n\nconst key = await ValueDialog.create({}, null, values);\nconst table = tables[key];\n\nconst results = (await table.drawMany(2)).results;\nconst uuids = results.map(result => `Compendium.${result.documentCollection}.${result.documentId}`);\n\nawait this.actor.addEffectItems(uuids, this.effect);\nthis.script.notification(\"TTirage de mutation effectué et appliqué\");","pvTcazVvW4v04otW":"if (args.totalWoundLoss > 0) {\n await 0rgs.actor.addCondition(\"poisoned\", 2)\n}","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n ws : game.wfrp4e.config.characteristics.ws,\n t : game.wfrp4e.config.characteristics.t,\n ag : game.wfrp4e.config.characteristics.ag,\n wp : game.wfrp4e.config.characteristics.wp\n}, this.effect.img), 1, \"Choisir la caractéristique\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","q5RgoYr12kBF6FA5":"return args.item?.system?.attackType == \"ranged\" && this.item == args.item && !this.actor.isOpposing","q8lOAWr2970sZeTw":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Carpentry)';\nconst difficulty = 'challenging';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding)\n{\n if (args.test.succeeded)\n {\n let staunch = Number(args.test.result.SL) + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n }\n args.test.result.other.push(`${this.actor.name} enlève ${staunch} Etats Hémmoragie du patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.Test.result.SL) < 0)\n {\n args.Test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\n }\n}","qDYJnO2JosPJrjpz":"if (args.totalWoundLoss <= 0) return;\n\n// Poisoned handled by Venin trait\n\nconst test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"average\"},\n context: {\n failure: `Gain de 1 Point de Corruption.`\n }\n});\n\nawait test.roll();\n\nif (test.failed && args.actor.type === \"character\")\n args.actor.update({\"system.status.corruption.value\": args.actor.system.status.corruption.value + 1});\n\n\nawait args.actor.applyEffect({effects : this.item.effects.getName(\"Morsure du Crâne Pourpre\")})","qITSQMvvkgj81fW1":"return ![\"t\", \"s\"].includes(args.characteristic)","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\nlet fearData = fear.toObject();\nlet leaderData = leader.toObject();\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\t effectData.system.sourceData.item = this.item.uuid\n effectData.duration.seconds = 10800\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Vision Nocturne\") && !this.actor.has(\"Vision Nocturne\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\n{\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\n\nAP[\"head\"].value += 1;\nAP[\"rArm\"].value += 1;\nAP[\"lArm\"].value += 1;\nAP[\"body\"].value += 1;\nAP[\"lLeg\"].value += 1;\nAP[\"rLeg\"].value += 1;","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","qZ8TBagp2d4dJAqI":"return !args.weapon || args.weapon?.system.isMelee","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\nthis.actor.status.encumbrance.pct = 0;","qhjU1QdsfqA8h5iI":"return args.item?.system?.attackType != \"ranged\" || !this.item.equipped.value","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qmGwT929EiZ3lW2x":"if (args.weaponProperties.qualities.penetrating)\n{\n args.alreadyPenetrating = true;\n}\nelse \n{\n args.weaponProperties.qualities.penetrating = true;\n}","qmH61HmrEJcmQTiu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.tNWrJUOArwfWXsPw\");\nitem = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});","qmOt7h17hGAKqQe0":"\n\nif (!args.opposedTest.attackerTest.item?.system?.isMelee) \n{\n let choice = await foundry.applications.api.DialogV2.confirm({ window: { title: this.effect.name }, content: `

${this.effect.name}: Is this a ranged or magical attack that orignates outside the Dome?

` })\n\n if (choice) \n {\n args.ward = 6;\n }\n}\n","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\n\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\nlet scriptData = this.effect.system.scriptData;\n\nif (closed) {\n scriptData[0].label = \"Open\";\n} else {\n scriptData[0].label = \"Close\";\n}\n\nawait this.effect.update({\"system.scriptData\": scriptData});","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones > SL) {\n args.Test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Valeur d'unité utilisée comme DR`)\n }\n}","qxzhPtysAjPWspKf":"if (this.actor.has(\"Mort-vivant\") || this.actor.has(\"Démoniaque\"))\n{\n this.script.notification(`Impossible d'entrer dans ${this.effect.name} !`);\n}","qyBmkCJo5606o4J9":"this.item.system.flaws.value = this.item.system.flaws.value.filter(i => i.name != \"weakpoints\")","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","rBAoyhzeU3Q8MVSk":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'difficult';\nconst target = 50;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.script.notification(\"Impossible d'être surpris\");\n this.actor.removeCondition(\"surprised\");\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\n\narmour.name = \"Armour (Hide)\"\narmour.system.specification.value = 2\nbite.system.specification.value = 3\nfear.system.specification.value = 2\nweapon.system.specification.value = 4\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\n\n\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunité Psychologique}\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Régénération}\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Taille (Large)}\n\nblessed.system.specification.value = \"Ulric\"\nsize.system.specification.value = \"Large\"\n\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\n\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choisir des Traits Optionnels\");\n\nitems = items.concat(chosen || [])\nthis.script.notification(`Adding ${items.map(i => i.name).join(\", \")}`);\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","rJ8pspSekyDLkiqG":"return args.skill.name === game.i18n.localize(\"NAME.Cool\")","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\n{\n args.test.result.damage += 1\n args.test.result.additionalDamage += 1\n if (!args.test.result.resolute) {\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\n args.test.result.resolute = true // Prevent duplicate messages\n }\n}\n","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\nlet terrorTraitItem = item.toObject()\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\nif (this.actor.flags.holed.applied === true) return;\nif (this.actor.hasCondition(\"dead\")) return;\n\nconst currentHoled = this.actor.flags.holed.holed || 0;\n\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\n if (!m.name.toLowerCase().includes(\"gun port\"))\n return acc;\n\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\n if (!closed) acc++;\n\n return acc;\n}, 0);\n\nconst totalHoled = currentHoled + openGunPorts;\nconst toughness = this.actor.system.characteristics.t.value;\nthis.actor.flags.holed.total = totalHoled;\n\nif (totalHoled >= toughness) {\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\n this.script.message(`\n

${speaker.alias} coule en raison d'un score Percé (${totalHoled}) égal ou supérieur à sa Robustesse (${toughness })

\n

\n Percé en raison de dégâts critiques : ${currentHoled}
\n Percé en raison de sabords ouverts : ${openGunPorts}\n

\n `, { flavor: this.effect.name.split(\"(\")[0]});\n this.actor.addCondition(\"dead\");\n} else if (totalHoled >= (toughness * 0.5)) {\n this.actor.system.details.move.value -= 1;\n this.actor.system.details.man -= 1;\n this.actor.flags.holed.half = true;\n}\n\nthis.actor.flags.holed.applied = true;","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\n{\n this.actor.removeCondition(\"bleeding\");\n this.script.notification(\"Retiré 1 Etat Hémmoragie\")\n}\nelse\n{\n this.script.notification(\"Aucun Etat Hémmoragie\");\n}","ratP9ByLjQPiLlFK":"args.data.reversal = {allowed : true, if: \"success\"};","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postPeur(this.item.Advances, this.actor.name)","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (data.system.location.key[0] == \"r\")\n{\n\tdata.system.location.value = \"Cheville droite\"\n}\nelse if (data.system.location.key[0] == \"l\")\n{\n\tdata.system.location.value = \"Cheville gauche\"\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","rgnGu3IQrS8Vj9Op":"const bonus = game.settings.get(\"wfrp4e\", \"homebrew\").advantageBonus;\n\nargs.fields.modifier += bonus;","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\n return ui.notifications.warn(\"Vous devez cibler exactement un seul Bateau.\");\n\nconst target = game.user.targets.first();\nconst vehicle = target.actor;\n\nif (!(vehicle.system instanceof VehicleModel))\n return ui.notifications.warn(\"Vous ne pouvez Constrict qu'un Bateau\");\n\nif (vehicle.size > 3)\n return ui.notifications.warn(\"Vous ne pouvez Constrict que des navires de Taille Large ou plus petits\");\n\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\n\nconst mainEffect = this.item.effects.contents[0];\nconst effectData = mainEffect.toObject();\n\neffectData.statuses = [effectData.name.slugify()];\n\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\n\nawait this.actor.applyEffect({effectData: [effectData]});\n\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\n\nthis.script.message(`${speaker.alias} a commencé à s'enrouler autour du ${target.name} et pourra commencer à l'écraser après ${turns} tours.`);","roYVcP5Zqcsa8jVw":"args.actor.system.details.move.value -= 1;","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Lâchez l'objet!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\nawait Test.roll();\n\n\nif (location && Test.Échoué)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(`Vous lâchez ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\nif (test.spell.lore.value == \"fire\")\n{\n if (test.result.overcast.usage.target?.AoE)\n {\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\n }\n if (test.result.overcast.usage.range)\n {\n test.result.overcast.usage.range.current *= 2\n test.result.overcast.usage.range.initial *= 2\n }\n \n}","s07GKMPCvQ8Heorc":"const value = this.effect.sourceActor.system.characteristics.wp.bonus;\nthis.script.message(await args.actor.applyBasicDamage(value, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));","s0kTuDE0qv68V2KI":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFBF00\"}}));\n","s5bO0Sf0qpS27Tve":"await args.actor.addCondition(\"ablaze\", 3)\nawait args.actor.addCondition(\"prone\");","s6eZXfZkC1My6EXl":"let lore = this.effect.name.split(\" \")[2].toLowerCase();\nif (args.item.type == \"spell\" && args.item.system.lore.value == lore)\n{\n args.item.system.cn.value = Math.max(0, args.item.system.cn.value - 1);\n}\n","s7kW3lm2eU5IPrLP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet dv = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.OzwDT6kzoLYeeR2d\")\nlet stealthy = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.XSb3QVB9ipPBFt56\")\nlet shadow = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [dv, stealthy, shadow], {fromEffect : this.effect.id});","s8idWt9YdMTRfnjV":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","s8xU6OOZbbfo6VIw":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus\n","s94yKZ4o5XN4JWM1":"// Any attack with such ammunition which inflicts at least one Wound,\n// also inflicts one Bleeding Condition.\n\nif (args.totalWoundLoss > 0) {\n args.actor.addCondition(\"bleeding\")\n}\n","s9J1TUkpGdvSWvPO":"this.actor.addCondition(\"blinded\");","s9KcytRE7i0cU06n":"if ([\"dragon\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.modifiers.other.push({label : this.effect.name, details : \"Blessures Doublées vs Dragons\", value : args.totalWoundLoss});\n args.totalWoundLoss *=2;\n }","sAVpm7hFRHpbCLXm":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"i\"].includes(args.characteristic)","sB4KB9bT3nQhAoqG":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choisir le Savoir\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","sHVLKIdPbzLVItCa":"if (args.actorsystem.details.move.oars.value > 0)\n args.actor.system.details.move.oars.value -= 1;","sHfkTRqTWPg2JAGN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","sKO8TcLIkCTnFvXu":"args.abort = true;\nthis.script.notification(`Cannot use ${this.item.system.location.value}!`, \"error\")","sNSfDBIA2k17hPYI":"let ablaze = this.actor.hasCondition(\"ablaze\");\nif (ablaze)\n{\n\tablaze?.delete();\n\tthis.script.notification(\"État En Flammes ignoré\");\n}\n","sPvfYQEnyAYNpIhF":"let shouldDamage = await foundry.applications.api.DialogV2.confirm({\n window : {title: this.effect.name + \" - \" + args.actor.name},\n content: \"Êtes-vous une créature humanoïde qui n'a pas fait de sacrifice à Rhya (ou à une autre divinité de la nature ou esprit puissant de la nature auquel le culte de Rhya est bien disposé, comme Isha ou Taal) depuis le dernier équinoxe de printemps ?\"\n});\n\nif (shouldDamage) {\n let damage = 1 + this.effect.sourceTest.result.baseSL;\n await args.actor.applyBasicDamage(damage, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n args.actor.addCondition(\"fatigued\");\n}","sQDh3g11pWchxpW9":"return true","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\nlet data = item.toObject();\ndata.name = data.name.replace(\"Target\", \"Greenskins, Mort-vivant, Chaos\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","sbK1a7txpSoXFzyB":"if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\n\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n\n if (ones > SL) {\n args.Test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Utilisation de l'unité des dés comme DR`)\n }\n}","scfm5iWWBxWI6QaK":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","shkBUtUuMPDKvFm7":"let test = await this.actor.setupSkill(\"Esquive\", {fields : {difficulty : \"average\"}})\nlet caster = this.effect.sourceActor\n\nlet fallen = this.effect.sourceTest.result.SL + caster.characteristics.wp.bonus\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n this.script.message(`${this.actor.prototypeToken.name} falls ${fallen} yards`)\n}","sjnoYbWpAugyDilW":"let test = await args.actor.setupSkill(\"Charme\", {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty: 'average'},\n characteristic: 'fel',\n context: {\n success: \"L'animal devient docile envers les Humains, les Elfes qui honorent Isha, et des alliés similaires.\"\n }\n});\nawait test.roll();","skVq3eDEYKFF2iZp":"// I'm assuming the endurance test specified is for the end-round check\nawait this.actor.addCondition(\"poisoned\", 4);\n","sm9d5lk6cM0OuUkf":"this.actor.applyPeur(Math.min(4, this.effect.sourceTest.result.overcast.usage.other.current))","svCqdytEOtqFXCcs":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 10,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 20,\n \"wp\" : 20,\n \"fel\" : 10\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Esquive\", \"Divertissement (Narration)\", \"Intuition\", \"Langue (Magick)\", \"Savoir (Magie)\" , \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\n\nlet talents = [\"Magie des Arcanes\", \"Magie Mineure\", \"Seconde Vue\"]\nlet trappings = [\"Arme simple\", \"Robes\", \"(2M) Bâton de combat\"]\nlet specialItems = [\n {name: \"Objet magique\", type: \"trapping\", trappingType: \"misc\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nlet ride = await foundry.applications.api.DialogV2.confirm({window : {title : \"Compétence\"}, content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\n\nif (ride)\n{\n let skill = await game.wfrp4e.utility.findSkill(\"Chevaucher (Cheval)\")\n skill = skill.toObject();\n skill.system.advances.value = 20;\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\n}\n\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\n\nif (location == \"lArm\")\n{\n\tthis.script.notification(\"Bras Gauche\")\n}\nelse if (location == \"rArm\")\n{\n\tthis.script.notification(\"Bras Droit\")\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\n\nif (location)\n{\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\n\n if (dropped.length)\n {\n this.script.notification(`Lâche ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(\", \")}!`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syRJs8P4aBFB5USD":"if (this.actor?.system?.details?.god?.value !== \"Sigmar\") return\nif (this.actor?.currentCareer?.careergroup?.value !== \"Prêtre\" \n && this.actor?.currentCareer?.careergroup?.value !== \"Prêtre Guerrier\" ) return\n \nlet currentSin = this.actor.system.status.sin.value \nlet updatedSin = currentSin + 2\nawait this.actor.update({\"system.status.sin.value\": updatedSin})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunité Psychologique\")?.delete();\n\nlet roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n\nroll.toMessage(this.script.getChatData());\n\nthis.script.notification(`Removed Immunité Psychologique, Adding ${roll.total} Broken Conditions`)\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sz0PqS1kroMOzUZk":"let characteristics = {\n \"ws\" : -15,\n \"bs\" : -30,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : 0,\n \"int\" : -20,\n \"wp\" : 15,\n \"fel\" : -20\n}\nlet skills = [\"Corps à corps (Bagarre)\"]\nlet skillAdvancements = [10]\n\nlet talents = [\"Peurless (Everything)\", \"Frénésie\", \"Endurci\"]\nlet trappings = [\"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = []\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","t48hkacYdOpzWvK9":"args.context.beatBlade = true;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","tCIT1a12Gt6k2ohA":"let resistance\nif (this.item.name.includes(\"(\") && !this.item.name.toLowerCase().includes(\"(any)\"))\n{\n\tresistance = this.item.parenthesesText\n}\nelse\n{\n resistance = await ValueDialog.create({text : \"Entrez la Résistance\", title : \"Résistance\"})\n\n if (resistance)\n {\n this.item.updateSource({name : `${this.item.name.split(\"(\")[0].trim()} (${resistance})`})\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\n }\n}\nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value?.replace(\"la Menace associée\", resistance) || resistance})\n\nif (resistance && !this.effect.name.includes(\"(\"))\n{\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\n}","tFAKRRRfTjQfdQz3":"this.actor.getActiveTokens().forEach(t => t.document.update({\"texture.tint\" : \"\"}));","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\nif (args.applyAP && nonmagical)\n{\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\n args.modifiers.ap.ignored += nonmagical\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore les PA non-magiques (\" + nonmagical + \")\");\n}","tHBlC7SpYiQ7SUGo":"return args.characteristic !== \"t\";","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\")\n{\n if (args.Test.Échoué)\n {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\n this.script.message(`Test de FM échoué, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n this.script.notification(`Suppression de ${fatigued.conditionValue} états Extenué`)\n fatigued.delete();\n}\nelse\n{\n\tthis.script.notification(`Aucun état Extenué`)\n}","tdICiJ26rJrDbxT6":"return args.characteristic != \"i\"","tg9N6aUo8WRPKj3H":"// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage.\nconst surprised = this.actor.hasCondition(\"surprised\")\nconst unconscious = this.actor.hasCondition(\"unconscious\")\nconst entangled = this.actor.hasCondition(\"entangled\")\nif (entangled || unconscious || surprised) return\n\n// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating.\nconst grimRating = parseInt(this.item.specification.value) || 1\nif (grimRating > this.actor.status.advantage.value) {\n this.actor.setAdvantage(grimRating)\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\nconst item = await fromUuid(uuid);\nconst data = item.toObject();\ndata.system.specification.value = 1;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tkZ8Ybqu518LQYEn":"await args.actor.addCondition(\"ablaze\");\n\targs.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.4CMKeDTDrRQZbPIJ\", this.effect, [{\"system.specification.value\": \"Krezok Soulflayer\"}])","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\n\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\nthis.script.message(`Localisation: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","tpz88eQFTjWHdFL5":"return args.item?.system?.attackType != \"ranged\" || this.item != args.item || this.actor.isOpposing","tyQLkRLk1AXB4g2u":"if (args.test.succeeded) {\n args.test.result.critical = \"Critical\"\n\n args.test.result.tables.critical = {\n label : args.test.result.critical,\n class : \"Critique-roll\",\n modifier : args.test.result.critModifier,\n key: `crit${args.test.result.hitloc.result}`\n }\n\n args.Test.result.other.push (`${this.effect.name}: Tout les succès sont des Critiques.`)\n\n}","u3olS2p7Ls1JXfAH":"this.script.message(await game.wfrp4e.tables.formatChatRoll(\"mutatephys\", {}, \"Tzeentch\"));","u46KnlxCjP42F6QY":"let table = await fromUuid(\"RollTable.uATmVS40DQLC1woJ\");\n\nif (table)\n{\n table.roll();\n}\nelse\n{\n this.script.notification(\"Table des Traits de personnalité introuvable\", \"error\");\n}","u4fKgGFEnOCnvvsv":"return args.item?.system?.isProjectiles;","u5dNZ0s3lWfL8KFb":"return args.fields.charging","u6CYMSZADrfXd48Q":"args.fields.modifier += 20;","uA5qaat5EXzkzltq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n let plague = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aKiuGzlVO51JvsjV\")\n let obj = plague.toObject();\n await this.actor.createEmbeddedDocuments(\"Item\", [obj]);\n}\n\nthis.effect.delete();","uAy4w7y8Uu9POF8C":"args.item.system.qualities.value.push({name : \"impact\"})","uCJk19rijMPRU8jg":"return this.item.equipped.value \n && args?.weapon\n && ([\"giant\"].includes(args.target.Species.toLowerCase()))","uEVSUTTam4Z96JJ2":"if (this.item.equipped.value\n && args.opposedTest.attackerTest.item \n && (args.opposedTest.attackerTest.item.isProjectiles || args.opposedTest.attackerTest?.spell)\n ) \n{\n args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts\", value : -2})\n}","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n {\n this.actor.addCondition(\"unconscious\")\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.message(\"Gain de 1 Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n else\n {\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\n }\n}\nelse\n{\n return false;\n}","uMvD2HWFNGqCmrBM":"if (args.test.options.addChargingDice)\n{\n\targs.test.result.diceDamage = {formula: \"1d10\", value : Math.ceil(CONFIG.Dice.randomUniform() * 10) }\n\targs.test.result.additionalDamage += args.test.result.diceDamage.value;\n}","uNYstk3eXmWamhzs":"args.actor.addCondition(\"blinded\")","uOHAsKlkFuIaAmjb":"args.actor.modifyWounds(1)","uRiAvo9fb3U7FIIy":"if (!this.actor.has(\"Bénédiction de Puissance\",\"prayer\")) this.actor.addEffectItems(\"Compendium.wfrp4e-core.items.Item.KSDrXcieyRc37YI7\", this.effect)","uZeNKQ24fToJ7qtY":"let addWounds = 0\nswitch (args.actor.system.details.size.value) {\n case \"lrg\": \n addWounds = 5\n break\n case \"enor\":\n addWounds = 10\n break\n case \"mnst\":\n addWounds = 15\n break\n}\nif (addWounds > 0) {\n args.modifiers.other.push({label : this.effect.name, details : \"Augmentation des Dégâts\", value : addWounds})\n}","ucF4aiJ1gpDB333G":"if (args.test.options.catfall && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) && !args.test.result.catfall)\n{\n args.test.result.other.push(`${this.effect.name}: Fall distance damage reduced by ${Number(args.test.result.SL) + 1} yards`)\n args.test.result.catfall = true; // Prevent duplicate messages\n}","ugL5IBB6R2yWyMWd":"if (args.totalWoundLoss > 0)\n{\n let apply = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : `

Appliquer les dégats de ${this.effect.name} ? L'attaquant doit avoir utilisé ses mains nues ou une arme de mêlée en métal.`})\n if (apply)\n {\n\n let damage = 5 + this.actor.characteristics.wp.bonus;\n\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\n\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\n\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\n\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n msg += ` (Ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\n this.script.message(msg)\n }\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Trade (Tailor)';\nconst difficulty = 'easy';\nconst target = 30;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n \n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","ulXfbycWUu36vdmS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\", slBonus : -1 * this.effect.sourceTest.result.SL}})\nawait Test.roll();\nif (Test.succeeded)\n{\n\tthis.script.notification(`Résistance à ${this.effect.name}`);\n}\nreturn test.failed;","ur2HAWDGSGvyAynU":"if (args.combat.combatant.actor.uuid === this.effect.sourceActor.uuid) {\n this.effect.delete();\n}","v00nVCRKqqRvY28t":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\", 3)\n}\n","v18mmwUmuKiVfwzQ":"let test = await this.actor.setupTest(game.i18n.localize(\"NAME.Résistance\"), {appendTitle : ` - ${this.effect.name}`, skipTargets: true});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\");\n}","v4CCxVaVGf9i8U7X":"let cured = await ValueDialog.create({text : \"Entrez le nombre de maladies/poisons soignés\", title : this.effect.name})\n\nlet damage = 0;\n\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet Test = new Roll(`${rolls.join(\" + \")}`);\nawait test.roll();\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\nthis.script.message(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let addOption = await foundry.applications.api.DialogV2.confirm({\n window : {title : \"Option\"},\n content :\n `\n Ajouter une option?\n

\n Projectiles (Arc) +10 et un Arc long avec 12 flèches\n

\n `,\n})\n\nlet choice = []\n\nif (addOption)\n{\n choice = [\n {\n type : \"skill\",\n name : \"Projectiles (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"(2M) Arc long\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche (12)\",\n }\n ];\n}\n\n\n\n\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing\n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n let equip = item.system.tags.has(\"equippable\");\n item = item.toObject()\n if (equip)\n {\n item.system.equipped.value = true;\n }\n items.push(foundry.utils.mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","vBqrydNzHmEHClqZ":"let maxWounds = this.actor.system.status.wounds.max\nthis.actor.update({\"system.status.wounds.value\": maxWounds})","vFUVWZ1l8wpTjLcx":"if (!this.actor.has(game.i18n.localize(\"NAME.Démoniaque\")))\n return\n\nlet caster = this.effect.sourceActor;\nif (caster)\n{\n let wp = caster.system.characteristics.wp\n if (this.actor.system.characteristics.wp.value >= wp.value)\n {\n this.script.notification(\"La cible a une FM supérieure, pas d'effet\")\n return\n }\n this.actor.applyBasicDamage(wp.bonus, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL })\n}","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \n{\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async Test => {\n await Test.roll();\n if (Test.Échoué) \n {\n await args.actor.addCondition(\"poisoned\")\n this.script.message(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\n }\n })\n}","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","vNUGuypkhx2P5YIA":"return args.characteristic !== \"fel\"","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait Test.roll();\nif (Test.Échoué)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n roll.toMessage(this.script.getChatData())\n\n this.script.message(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\n ChatMessage.create({\n content: `\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n })\n}\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\nargs.actor.system.characteristics.t.initial += 10 * specification;\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","vc4bELo0cWYoILfB":"let choice = await ItemDialog.create(this.actor.itemTypes.disease, 1, \"Choisir une maladie à guérir (contractée naturellement)\")\n\nthis.script.message(`Guéri ${choice[0]?.name}`);\nchoice[0].delete()","vc8eVKtyjtOGvWlK":"if (!this.actor.hasCondition(\"entangled\"))\n{\n this.effect.delete();\n}","vcM0IgsYVmfWrlO3":"fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n})","ve3RcfTi49rdYZU0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Résistance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Wounded\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Gain de \" + disease.name)\n })\n }","vejhfB9aI58iF1vr":"let choice1 = [\n {\n type: \"trait\",\n name: \"Maladie\",\n },\n {\n type: \"trait\",\n name: \"Infecté\",\n },\n {\n type: \"trait\",\n name: \"Perturbant\",\n },\n {\n type: \"trait\",\n name: \"Parasité\",\n },\n {\n type: \"trait\",\n name: \"Territorial\",\n }\n]\n\nlet updateObj;\nlet actor;\n\nasync function addTrait(c) {\n let items = [];\n console.log(\"TEST1\", c);\n let existing;\n if (c.type == \"trait\") {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type);\n }\n console.log(\"TEST\", existing);\n if (!existing) {\n let item = await game.wfrp4e.utility.find(c.name, c.type);\n if (item) {\n item = item.toObject();\n items.push(item);\n }\n else\n ui.notifications.warn(`Impossible de trouver ${c}`, { permanent: true });\n }\n console.log(\"WISH LIST2\", choice1, items);\n actor.createEmbeddedDocuments(\"Item\", items);\n}\n\nasync function dialogChoice() {\n for (let c of choice1)\n {\n if (await foundry.applications.api.DialogV2.confirm({window : {title: \"Option\"}, content:`

Add Option?

  1. ${c.name}
`}))\n {\n addTrait(c)\n c.valid = true;\n }\n }\n}\n\nupdateObj = this.actor.toObject();\nactor = this.actor\nawait dialogChoice();\n","vgfs0DXvF5iKrz1M":"return args.characteristic != \"ag\" || this.item.getFlag(\"wfrp4e\", \"passed\")","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\nif (SL < 0)\n SL = 0\nthis.actor.addCondition(\"fatigued\", 1 + SL)","vn13U388mwquGN9y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.wGTD2LezlI6Atyy0\");\nlet leader = item.toObject();\n\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.Item.u0CFf3xwiyidD9T5\");\nlet luck = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [leader, luck], {fromEffect : this.effect.id});","vphNSTVxfZjApblV":"const bonus = this.effect.getFlag(\"wfrp4e-tribes\", \"bonus\");\n\nargs.fields.modifier += bonus;","vtXJI2VGlU9vODXz":"args.initiative += \"+10\";","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\nif (broken)\n{\n broken.delete();\n this.script.notification(\"Etat Brisé supprimée\")\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\nargs.modifiers.other.push({label : this.effect.name, value : -1)","vzSj3vvPryp02EVC":"if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet slOver = this.effect.sourceTest.result.slOver;\nlet overcast = this.effect.sourceTest.result.overcast\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\nlet added = Math.floor(slOver / 3) || 0\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4RuGIfseGoxXA3k":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'challenging';\nconst target = 20;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","w4zubIHP0XgMXsFe":"return !args.context.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 60\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w8s2RUzA1jmyu7vy":"if (args.test.isCritical && args.test.weapon.weaponGroup.value == \"crossbow\") {\n args.test.result.tables.critical.modifier \n = (typeof args.test.result.tables.critical.modifier ==='undefined') \n ? 10 \n : args.test.result.tables.critical.modifier + 10\n}","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.context.staunchBleeding = true;","wBc8XvkAnv3j93vR":"if (Number(args.actor.system.status.fate.value) > 0) {\n args.actor.update({\"system.status.fate.value\": Math.max(args.actor.system.status.fate.value - 1, 0)});\n args.actor.update({\"system.status.fortune.value\": Math.max(args.actor.system.status.fortune.value - 1, 0)});\n this.script.message(`Réduction du Destin et de la Chance de 1`);\n}\nelse if (Number(args.actor.system.status.resilience.value) > 0)\n{\n args.actor.update({\"system.status.resilience.value\": Math.max(args.actor.system.status.resilience.value - 1, 0)});\n args.actor.update({\"system.status.resolve.value\": Math.max(args.actor.system.status.resolve.value - 1, 0)});\n this.script.message(`Réduction de la Résilience et de la Détermination de 1`);\n}","wFHjQyCR6Wzn6TeQ":"this.actor.system.status.addArmour(1, {source: this.effect, magical: true});","wLg8LbPAPbQgUg0Z":"return (args.item?.system?.attackType != \"melee\" \n || this.actor.attacker != undefined \n || args.target?.hasCondition(\"surprised\") == undefined)","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","wb1DpSdIhSqYG5cp":"args.fields.slBonus = -1 * parseInt(this.effect.sourceTest.result.SL)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\nlet msg = \"\";\nfor(let item of items)\n{\n if (item.system.properties.qualities.durable)\n {\n await item.update({\"system.qualities.value\" : []});\n msg += `

${item.name} perd toutes ses Qualités

`\n }\n else\n {\n msg += `

${item.name} se désintègre en poussière !

`\n await item.update({name : item.name + \" (Poussière)\"})\n }\n}\nif(msg)\n{\n this.script.message(msg);\n}","we6JUzDvybekAbtn":"return args.type !== \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","weDTna1dLMwHsNlJ":"args.modifiers.other.push({label : this.effect.name, details : \"Réduction des Dégâts\", value : -4})","whUSkaR1yem21bXp":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 6,\n \"int\" : -5,\n \"wp\" : 0,\n \"fel\" : 10\n}\nlet skills = [\"Corps à corps (Base)\", \"Pistage\"]\nlet skillAdvancements = [8, 7]\nlet talents = [\"Charge Berserk\", \"Frappe précise\", \"Frappe blessante\"]\nlet traits = [\"Flight (8)\", \"Rage\", \"Nuée\", \"Pisteur\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name +='Arme','Cornes','Tail','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else\n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells)\n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else\n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\nargs.item.system.qualities.value.push({name : \"magical\"});","wyTCozh9qGTx6yK0":"if (args.context.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\targs.abort = true;\n\tthis.script.notification(\"N'a pas besoin de faire de tests de Peur ou de Terreur\");\n}","x1Ecj6MXY94kpcQq":"if (!this.item.equipped.value) {\n return this.script.notification(`Vous devez équiper le ${this.item.name} pour récupérer des points de blessures.`,\"info\")\n}\n\nconst runesOfRestoration = this.item.effects.contents.filter(e => e.name == this.effect.name)\nconst restorationWounds = parseInt(runesOfRestoration.length * this.actor.system.characteristics.t.bonus)\n\nthis.actor.modifyWounds(restorationWounds)\nthis.script.message(`Vous avez récupéré ${restorationWounds} blessures avec ${this.script.label}.`)","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nlet data = item.toObject();\nfoundry.utils.setProperty(data, \"flags.wfrp4e.breath\", \"fire\")\ndata.system.specification.value = 5\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\n}\nelse \n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\nChatMessage.create({content : \"La grâce dépasse le style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\n \"nobles\" : \"Nobles\",\n \"guilders\" : \"Membres de Guilde\",\n \"servants\" : \"Serviteurs\"\n}), 1, \"Choisir Group\")\n\nlet name = choice[0]?.name\n\nif (!name)\n{\n return;\n}\n\nif (item)\n{\n item.update({\n name : item.name.split(\"(\")[0] + ` (${name})`,\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\n })\n}\nelse\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\n let data = item.toObject();\n data.name += ` (${name})`\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\n scythe.name = \"La Faux de Shyish\";\n scythe.system.damage.value = \"WPB + 3\"\n scythe.system.equipped = true;\n scythe.img = this.effect.img;\n scythe.system.qualities.value.push({name : \"magical\"})\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","xEE0ymsaH2tn2M99":"return args.type != \"cast\";","xIRU2SaqLeWmqGDI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\")\nlet data = item.toObject();\ndata.name += \" (Disease)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xJZKVGE04o84Gibo":"if (!this.item.actor.name.includes(\"Brunner\")) return;\n\nargs.item.system.damage.value += \"+1\";","xL4S0H1RP8hhXW7c":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xneBqGOs1QS7kfUr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xLKAuD6yzwjAL6tJ":"return !args.weapon || args.weapon?.system.properties?.qualities.shield || !this.item.system.usesLocation(args.weapon)","xMhhVol8Is3DJ3gb":"if (this.effect.sourceTest.succeeded)\n{\n let blinded = 1 + this.effect.sourceTest.result.overcast.usage.other.count\n this.actor.addCondition(\"blinded\", blinded)\n}","xPDMpOvC1ZBVxrNg":"args.fields.modifier += 10;","xPwa3NftkpMBc2AO":"return ![\"ws\", \"s\", \"ag\"].includes(args.characteristic)","xQ3xR2Wf0wHFa76H":"return [\"ws\", \"bs\", \"fel\", \"dex\"].includes(args.characteristic) || args.weapon","xQnoRTHotZKrwPrx":"return args.type == \"cast\" && args.item?.system.lore?.value == \"shadow\"","xRTmMwNfdirjsi8X":"this.actor.addCondition(\"ablaze\");\n\nthis.actor.applyBasicDamage(this.effect.sourceTest.result.damage)","xUpKYT7BZCSmAfUy":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","xYTkj8jhSVOSoLbC":"this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] = true;","xcny1zYAphdfrKv9":"args.fields.modifier -=20;","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\n}","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\n\nif (args.equipped) {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()])\n this.script.message(`${this.actor.name} porte le ${this.item.name}.
\n Ils subissent –20 à toutes les tentatives de résistance aux maladies.
\n S'ils portent le masque pendant plus d'une heure ou bénéficient de l'un de ses effets, ils sont exposés à @Corruption[moderate]{Corruption modérée}.\n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is Retiré\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Usagé)\"})\n this.script.message(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être manuellement retirés.`,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n\n}\n","xihniGjgqOhuaKWc":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","xiyQSXozoLxt0MZs":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.wMwSRDmgiF2IdCJr\", // utilisateur d\n \"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\", // Immunité Psychologique\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","xkdQhZ9KKqmocNLO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.tXKX29QZBdHmyMc7\")\nlet data = item.toObject();\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xklncIMwQIespDxS":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"vhard\"}});\nawait Test.roll();\nCorruptionMessageModel.createCorruptionMessage(\"minor\", this.script.getChatData())\n\nif (Test.Échoué)\n{\n this.actor.addCondition(\"unconscious\");\n}","xnHobI9HojObLHMp":"args.applyTB = false;\nargs.applyAP = false;","xot4JWCRzLkobHtL":"args.actor.removeCondition(\"broken\", 1);","xpgXWoK2zDnG1uiF":" let stunned = args.actor.hasCondition(\"stunned\")\n if (stunned)\n {\n stunned.system.scriptData = stunned.system.scriptData.filter(s => s.trigger != \"dialog\")\n stunned.system._scripts = null;\n }\n\n\n\n let poisoned = args.actor.hasCondition(\"poisoned\")\n if (poisoned)\n {\n poisoned.system.scriptData = poisoned.system.scriptData.filter(s => s.trigger != \"dialog\")\n poisoned.system._scripts = null;\n }\n\n\n\n let deafened = args.actor.hasCondition(\"deafened\")\n if (deafened)\n {\n deafened.system.scriptData = deafened.system.scriptData.filter(s => s.trigger != \"dialog\")\n deafened.system._scripts = null;\n }\n\n\n\n\n let entangled = args.actor.hasCondition(\"entangled\")\n if (entangled)\n {\n entangled.system.scriptData = entangled.system.scriptData.filter(s => s.trigger != \"dialog\")\n entangled.system._scripts = null;\n }\n\n\n\n\n let fatigued = args.actor.hasCondition(\"fatigued\")\n if (fatigued)\n {\n fatigued.system.scriptData = fatigued.system.scriptData.filter(s => s.trigger != \"dialog\")\n fatigued.system._scripts = null;\n }\n\n\n\n let blinded = args.actor.hasCondition(\"blinded\")\n if (blinded)\n {\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\n blinded.system._scripts = null;\n }\n\n\n\n let broken = args.actor.hasCondition(\"broken\")\n if (broken)\n {\n broken.system.scriptData = broken.system.scriptData.filter(s => s.trigger != \"dialog\")\n broken.system._scripts = null;\n }\n\n\n\n let prone = args.actor.hasCondition(\"prone\")\n if (prone)\n {\n prone.system.scriptData = prone.system.scriptData.filter(s => s.trigger != \"dialog\")\n prone.system._scripts = null;\n }\n\n","xq3RANOtmPhy77ne":"args.update({texture : {tint : \"#FFBF00\"}});","xqWxV9w5ezBQdJkZ":"return args.context.corruption;","xvGxwv7X0Vq3vNqb":"args.fields.modifier -= 10;","y3F1K1sYBymPZCjz":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n}\nlet skills = [\"Athlétisme\", \"Soin aux animaux\", \"Langue (Bataille)\", \"Corps à corps (Base)\", \"Corps à corps (Cavalerie)\", \"Chevaucher\"]\nlet skillAdvancements = [10,10, 10, 10, 10, 20]\n\nlet talents = [\"Cavalier émérite\", \"Coup puissant\"]\nlet trappings = [\"Arme simple\", \"Bouclier\", \"Lance de cavalerie\", \"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\nlet specialItems = [\n {name: \"Chaos Steed\", type: \"trapping\", trappingType: \"misc\" },\n]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","y3agVFVBR8tVqWyx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","y7hk7prQ0lLTyv1Y":"return args.item?.system?.isProjectiles && (args.item.system.weaponGroup.value !== \"blackpowder\" || args.item.system.weaponGroup.value !== \"engineering\")","y9fwuiqn44t13WAq":"return this.item.equipped.value \n && args?.weapon\n && ([\"goblin\"].includes(args.target.Species.toLowerCase()))","yAL0YwZWVm8o1nxa":"if (this.actor.hasCondition(\"dead\") && !this.actor.gardenOfCorpses)\n{\n this.script.message(\"[[3d10]] @UUID[Compendium.wfrp4e-core.actors.T79RqnDOAQLn3I1s]{zombies} spring forth from the remains.\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n this.actor.gardenOfCorpses = true;\n // local storage is sufficient to prevent multiple messages\n}","yCgH3N9AurIiAv0i":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"(Sense)\") || this.item.system.tests.value.toLowerCase().includes(\"(any)\"))\n{\n let Tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure Tests value reflects that\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\n {\n let sense = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${sense})`;\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n taste : \"Goût\",\n sight : \"Vue\",\n smell : \"Odorat\",\n hearing : \"Ouïe\",\n touch : \"Toucher\"\n }, this.item.img), 1, {title : this.item.name, text : \"Choisissez un Sens\"});\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = `${tests.split(\"(\")[0].trim()} (${choice[0].name})`\n }\n }\n\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","yDvxF9llUYwJg0sE":"if (getProperty(args.data, \"system.loaded.value\") == true)\n{\n let repeaterValue = Math.ceil(CONFIG.Dice.randomUniform() * 10);\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value);\n let repeater = qualities.find(i => i.name == \"repeater\")\n if (repeater)\n {\n repeater.value = repeaterValue\n }\n else \n {\n qualities.push({name : \"repeater\", value : repeaterValue})\n }\n foundry.utils.setProperty(args.data, \"system.loaded.amt\", repeaterValue)\n this.item.update({\"system.qualities.value\" : qualities});\n this.script.notification(\"Repeater \" + repeaterValue);\n}\nelse if (foundry.utils.getProperty(args.data, \"system.loaded.value\") == false)\n{\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value).filter(i => i.name != \"repeater\");\n this.item.update({\"system.qualities.value\" : qualities});\n}","yFMvxecXAZ6T2O0S":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll({allowInteractive : false});\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.message(`Two @UUID[Compendium.wfrp4e-eis.actors.cLOGeMqUty61nYB9]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","yMMzZ7daCqRlGT3N":"let item = args.opposedTest.attackerTest.item;\nif (!item.isMagical && (item.type == \"weapon\" || item.type == \"trait\"))\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Retirer l'Indice de Dégâts\", value : -1 * (args.totalWoundLoss - args.opposedTest.result.differenceSL)})\n}\n","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","yQziCK8G8I1RYkTj":"let add;\nif (args.opposedTest?.attackerTest?.weapon?.isProjectiles && args.opposedTest?.result.hitloc?.value === \"head\") {\n add = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\n}\n\nif (add) {\n\n args.modifiers.ap.metal++;\n args.modifiers.ap.used++;\n args.modifiers.ap.value++;\n args.modifiers.ap.details.push(\"+1 PA contre les attaques à distance de face\");\n}","yTmRoUstxHMso91c":"if (args.item.name == game.i18n.localize(\"NAME.MagicResistanceTrait\") && args.item.type == \"trait\")\n{\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\n}","yYNBZjmBnytXpRn3":"this.actor.reset();","yamap8V6Gx2Z9Smu":"const uuids = [\n \"Compendium.wfrp4e-core.items.Item.nWLsoWQBCjPRKxYx\", // Robust\n \"Compendium.wfrp4e-core.items.Item.jviOQmy0luQOySC2\", // Tenacious\n];\n\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","ybxDG2ezvRx02LYx":"return !args.context.corruption","ynNCBAYwJFkTiXV1":"this.actor.system.status.addArmour(4, {source : this.effect})","ynV7tz0OdCwlsQp6":"let msg = \"\"\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\nmsg += `

${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}

`\n\nthis.script.message(msg);","ynoHNXXCGRS6fTqF":"let msg = \"\"\n\nlet i_gain = (await new Roll(\"1d10\").roll()).total\n\nif (args.actor.characteristics.i.value <= 0)\n{\n i_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nmsg = `${this.actor.prototypeToken.name} gagne ${i_gain} Initiative`\n\nlet newValue = i_gain + args.actor.characteristics.i.modifier\n\nthis.actor.update({\"system.characteristics.i.modifier\" : newValue})\n\n\nlet hitloc = await game.wfrp4e.tables.rollTable(\"hitloc\")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : value})\n\nmsg += ` alors que des yeux sortent de leur ${desc}`\n\nthis.script.message(msg)","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yvtF2t9aibxibAIM":"const test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {\n skipTargets: true,\n appendTitle: ` — ${this.effect.name}`,\n fields: {difficulty: \"challenging\"},\n context: {\n failure: `Gain de l'état @Condition[Prone].`,\n success: `Capable de bouger.`\n }\n});\n\nawait test.roll();\n\nif (test.failed)\n this.actor.addCondition(\"prone\");","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\n\tthis.script.notification(\"Effets secondaires appliqués\");\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","z8W5PAwBR0PXY6ty":" await args.actor.addCondition(\"ablaze\");\n await args.actor.addCondition(\"blinded\");\n await args.actor.addCondition(\"poisoned\", 2);","z8mwLihZQu0JtUHY":"\nlet characteristics = {\n \"ws\" : 20,\n \"bs\" : 20,\n \"s\" : 0,\n \"t\" : 20,\n \"i\" : 30,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 65,\n \"wp\" : 70,\n \"fel\" : 20\n}\nlet skills = [\"Focalisation\", \"Calme\", \"Intimidation\", \"Langue (Magick)\", \"Language (Nehekharan)\", \"Commandement\", \"Savoir (Magie)\", \"Perception\"]\nlet skillAdvancements = [20, 30, 25, 30, 20, 20, 30, 20]\nlet talents = [\"Harmonisation Aethyrique\", \"Magie des Arcanes (Domaine)\", \"Dur à cuire\", \"Diction Instinctive\", \"Perception de la magie\", \"Menaçant\", \"Menaçant\", \"Magie Mineure\", \"Lire/Écrire\", \"Seconde Vue\", \"Mage de guerre\"]\nlet trappings = [\"Arme simple\"]\nlet specialItems = [ \n {name: \"Mouldering Robes\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Pouches containing ritual components\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \n {name: \"Staff\", type: \"weapon\", damage: \"SB+2\"}, \n {name: \"Magie Noire (Nécromancie)\", type: \"talent\"},\n] \nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let item of specialItems) {\n let newItem\n if (item.type == \"weapon\") {\n newItem = new ItemWFRP4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\n } else if (item.type == \"trapping\") {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\n } else {\n newItem = new ItemWFRP4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\n }\n items.push(newItem.toObject())\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(\">>>>>>><\", items)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n","z926Cl2vxUfyLY0V":"if (![\"rArm\", \"lArm\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true\n\nreturn [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","z9NEbIUBsKMaTuCz":"if (args.opposedTest.result.hitloc && args.opposedTest.result.hitloc.value == \"head\") \n{\n args.actor.addCondition(\"entangled\")\n}","zBHTIBU8OlYj1YIO":"args.fields.modifier += this.effect.sourceActor?.system.characteristics.wp.value;","zF1IKmobCB8ea58M":"return this.sourceActor.uuid === this.actor.uuid || ![\"ws\", \"ag\"].includes(args.characteristic);","zGwtyjTUBeSQ110p":"if (args.opposedTest.attackerTest.preData.charging) \n{\n let mostProtectedLoc;\n let mostProtectedValue = 0;\n for (let loc in this.actor.status.armour) \n {\n if (this.actor.status.armour[loc].value != undefined && this.actor.status.armour[loc].value > mostProtectedValue) \n {\n mostProtectedLoc = loc;\n mostProtectedValue = this.actor.status.armour[loc].value;\n }\n }\n if (mostProtectedValue)\n {\n args.modifiers.other.push({label: this.effect.name, value : mostProtectedValue});\n }\n}","zI5hXv2NLGWqnmDD":"if (args.totalWoundLoss > 0)\n{\n\targs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})\n}","zIErcRiBmIZRbary":"if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.test.characteristicKey))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","zIpl3SkWv8zzlr2D":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = (await ItemDialog.createFromFilters(filters, 4, {text : \"Choisissez 4 Sorts Mineurs\"})).map(i => i.toObject());\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : [\"death\"]\n }\n]\n\nlet arcane = (await ItemDialog.createFromFilters(filters, 8, {text : \"Choisissez 8 Sorts d'Arcane et Savoir de la Mort\"})).map(i => i.toObject());\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"name\",\n value: /^((?!\\().)*$/gm, // Remove all spells with parentheses (all arcane spells spells)\n regex: true\n },\n {\n property : \"system.lore.value\",\n value : \"necromancy\"\n }\n]\n\nlet necromancy = (await ItemDialog.createFromFilters(filters, 3, {text : \"Choisissez 3 dans le Savoir de Nécromancie\"})).map(i => i.toObject());\n\nlet items = [...necromancy, ...petty, ...arcane]\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.notification(\"Hémorragique ajouté\")\n}","zL7ECmBBMAqf5Esn":"let hasMagazine = await foundry.applications.api.DialogV2.confirm({window : {title : this.effect.name}, content: \"

Le navire a-t-il un magasin ou tout autre type de réserve pour la poudre noire ?

\"});\n\nif (!hasMagazine) return;\n\nlet roll = new Roll(\"d10\");\nawait roll.evaluate();\n// await roll.toMessage();\nlet anchor = roll.toAnchor();\n\nlet crits = [];\n\nfor (let i = 0; i < roll.total; i++) {\n let result = await WFRP_Tables.rollTable('crithull');\n let collection = game.packs.get(result.object.documentCollection)\n\n if (collection)\n await collection.getDocuments()\n\n if (!collection)\n collection = game.items;\n\n let item = collection.get(result.object.documentId)\n if (item)\n crits.push(item);\n}\n\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\nthis.script.message(`

${this.item.name} provoque un nombre supplémentaire de ${anchor.outerHTML} Coups Critiques à la Coque!

  • ${uuids.join('
  • ')}
`)","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zWZG8OmxqTpzHjFV":"args.actor.characteristics.ag.modifier -= 10;\n\n if (args.actor.details.move.value > 3)\n {\n args.actor.details.move.value -= 1;\n if (args.actor.details.move.value < 3)\n args.actor.details.move.value = 3\n }","zXh8rgMxWoCLTxVd":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Voile';\nconst difficulty = 'challenging';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","zadppy7FEbXvgUON":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 5\n}\nlet skills = [\"Perception\", \"Escamotage\", \"Discrétion (Urbaine)\"]\nlet skillAdvancements = [10, 10, 10]\nlet talents = [\"Criminel\", \"Etiquette (Criminals)\"]\nlet trappings = [\"Corde, 10 mètres\", \"Lockpick\", \"Masque\"]\nlet items = []\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else\n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings)\n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n trappingItem.system.equipped.value = true;\n\n items.push(trappingItem);\n }\n else\n {\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\n }\n}\n\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);","zasFOZohkrdFIBwr":"let modifier = 0\n if (this.effect.name.includes(\"Moderate\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier","zdGAvfL7zJ7wpYxG":"const repaired_message = `

Réparation terminée ${this.item.name}.

`;\nconst Test = 'Métier (Charpentier)';\nconst difficulty = 'easy';\nconst target = 40;\n\nconst extendedTestData = {\n name: this.item.name,\n type: \"extendedTest\",\n img: this.item.img,\n system: {\n SL: {\n current: 0,\n target: target\n },\n Test: {\n value: Test\n },\n completion: {\n value: \"remove\"\n },\n difficulty: {\n value: difficulty\n }\n },\n effects: [\n {\n name: `Réparation de ${this.item.name}`,\n img: this.item.img,\n system: {\n transferData : {\n type: \"document\",\n documentType: \"Item\"\n },\n scriptData: [\n {\n label: this.item.name,\n script: `\n let id = this.item.flags.wfrp4e.fromEffect;\n let effect = this.actor.appliedEffects.find(e => e.id === id);\n this.script.message(\"${repaired_message}\");\n await effect.item.delete();\n `,\n trigger: \"deleteEffect\"\n }\n ]\n }\n \n }\n ]\n};\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\n","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\n}\nelse\n{\n\tthis.script.notification(\"Plus rien !\", \"error\")\n}","zjTEhJuLcFVkzory":"if (!args.test.preData.options?.kingship) return\n\nif (!this.item.equipped.value || !args.test.item) return;\nif ([game.i18n.localize(\"NAME.Charm\"), \n game.i18n.localize(\"NAME.Intimidate\"), \n game.i18n.localize(\"NAME.Leadership\")].includes(args.test.item.name))\n{\n args.test.preData.canReverse = true\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\n if (target.actor.details.size.value == \"tiny\")\n modifier = 30\n if (target.actor.details.size.value == \"ltl\")\n modifier = 20\n if (target.actor.details.size.value == \"sml\")\n modifier = 10\n\t\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\n\nAP[\"head\"].value += 2;\nAP[\"rArm\"].value += 2;\nAP[\"lArm\"].value += 2;\nAP[\"body\"].value += 2;\nAP[\"lLeg\"].value += 2;\nAP[\"rLeg\"].value += 2;","zphxI8VSWbNQCMBy":"args.size = \"lrg\"","zqShIJnrRReGgP94":"let {added, removed} = this.effect.getFlag(\"wfrp4e\", \"propertiesChanged\");\n\nfor(let property of (added || []))\n{\n let hasValue = game.wfrp4e.config.propertyHasValue[property];\n if (!args.item.system.qualities.value.find(i => i.name == property))\n {\n args.item.system.qualities.value.push({name : property, value : (hasValue ? 2 : null)})\n }\n}\n\nfor(let property of (removed || []))\n{\n args.item.system.flaws.value = args.item.system.flaws.value.filter(i => i.name != property)\n}","zsoTVkHe4nHY1M52":"this.script.message(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","zxG5KbliWE9xWNQD":"this.script.message(\"Réussit automatiquement tout \" + this.script.label);\nargs.abort = true;"}); } \ No newline at end of file diff --git a/packs/aides-de-jeu-fr/001261.log b/packs/aides-de-jeu-fr/001281.log similarity index 100% rename from packs/aides-de-jeu-fr/001261.log rename to packs/aides-de-jeu-fr/001281.log diff --git a/packs/aides-de-jeu-fr/CURRENT b/packs/aides-de-jeu-fr/CURRENT index 736c48be..a1022812 100644 --- a/packs/aides-de-jeu-fr/CURRENT +++ b/packs/aides-de-jeu-fr/CURRENT @@ -1 +1 @@ -MANIFEST-001259 +MANIFEST-001279 diff --git a/packs/aides-de-jeu-fr/LOG b/packs/aides-de-jeu-fr/LOG index 779ebabc..c4a1c272 100644 --- a/packs/aides-de-jeu-fr/LOG +++ b/packs/aides-de-jeu-fr/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.527176 7f93eaffd6c0 Recovering log #1257 -2026/01/07-15:26:43.536993 7f93eaffd6c0 Delete type=3 #1255 -2026/01/07-15:26:43.537037 7f93eaffd6c0 Delete type=0 #1257 -2026/01/07-15:53:28.412551 7f93e9ffb6c0 Level-0 table #1262: started -2026/01/07-15:53:28.412580 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK -2026/01/07-15:53:28.419118 7f93e9ffb6c0 Delete type=0 #1260 -2026/01/07-15:53:28.432727 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.937989 7fac277fe6c0 Recovering log #1277 +2026/01/29-10:58:42.947978 7fac277fe6c0 Delete type=3 #1275 +2026/01/29-10:58:42.948038 7fac277fe6c0 Delete type=0 #1277 +2026/01/29-11:43:15.082893 7fa9a6fef6c0 Level-0 table #1282: started +2026/01/29-11:43:15.082936 7fa9a6fef6c0 Level-0 table #1282: 0 bytes OK +2026/01/29-11:43:15.089469 7fa9a6fef6c0 Delete type=0 #1280 +2026/01/29-11:43:15.099933 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) diff --git a/packs/aides-de-jeu-fr/LOG.old b/packs/aides-de-jeu-fr/LOG.old index 8aa17351..ddbc0235 100644 --- a/packs/aides-de-jeu-fr/LOG.old +++ b/packs/aides-de-jeu-fr/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.276373 7f93eaffd6c0 Recovering log #1253 -2026/01/07-15:09:19.291800 7f93eaffd6c0 Delete type=3 #1251 -2026/01/07-15:09:19.291847 7f93eaffd6c0 Delete type=0 #1253 -2026/01/07-15:13:49.642315 7f93e9ffb6c0 Level-0 table #1258: started -2026/01/07-15:13:49.642358 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK -2026/01/07-15:13:49.649460 7f93e9ffb6c0 Delete type=0 #1256 -2026/01/07-15:13:49.662442 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.344493 7fac277fe6c0 Recovering log #1273 +2026/01/29-10:52:14.354354 7fac277fe6c0 Delete type=3 #1271 +2026/01/29-10:52:14.354436 7fac277fe6c0 Delete type=0 #1273 +2026/01/29-10:55:44.810919 7fa9a6fef6c0 Level-0 table #1278: started +2026/01/29-10:55:44.810962 7fa9a6fef6c0 Level-0 table #1278: 0 bytes OK +2026/01/29-10:55:44.820672 7fa9a6fef6c0 Delete type=0 #1276 +2026/01/29-10:55:44.820811 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) diff --git a/packs/aides-de-jeu-fr/MANIFEST-001259 b/packs/aides-de-jeu-fr/MANIFEST-001279 similarity index 84% rename from packs/aides-de-jeu-fr/MANIFEST-001259 rename to packs/aides-de-jeu-fr/MANIFEST-001279 index 2c724c75..657afa51 100644 Binary files a/packs/aides-de-jeu-fr/MANIFEST-001259 and b/packs/aides-de-jeu-fr/MANIFEST-001279 differ diff --git a/packs/antidotes-and-remedes/001263.log b/packs/antidotes-and-remedes/001283.log similarity index 100% rename from packs/antidotes-and-remedes/001263.log rename to packs/antidotes-and-remedes/001283.log diff --git a/packs/antidotes-and-remedes/CURRENT b/packs/antidotes-and-remedes/CURRENT index 3023f4b4..a9aa3236 100644 --- a/packs/antidotes-and-remedes/CURRENT +++ b/packs/antidotes-and-remedes/CURRENT @@ -1 +1 @@ -MANIFEST-001261 +MANIFEST-001281 diff --git a/packs/antidotes-and-remedes/LOG b/packs/antidotes-and-remedes/LOG index 3be701ec..51b5f7fe 100644 --- a/packs/antidotes-and-remedes/LOG +++ b/packs/antidotes-and-remedes/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.539401 7f93ebfff6c0 Recovering log #1259 -2026/01/07-15:26:43.549699 7f93ebfff6c0 Delete type=3 #1257 -2026/01/07-15:26:43.549758 7f93ebfff6c0 Delete type=0 #1259 -2026/01/07-15:53:28.419273 7f93e9ffb6c0 Level-0 table #1264: started -2026/01/07-15:53:28.419304 7f93e9ffb6c0 Level-0 table #1264: 0 bytes OK -2026/01/07-15:53:28.426268 7f93e9ffb6c0 Delete type=0 #1262 -2026/01/07-15:53:28.440100 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.950367 7fac277fe6c0 Recovering log #1279 +2026/01/29-10:58:42.959516 7fac277fe6c0 Delete type=3 #1277 +2026/01/29-10:58:42.959596 7fac277fe6c0 Delete type=0 #1279 +2026/01/29-11:43:14.910167 7fa9a6fef6c0 Level-0 table #1284: started +2026/01/29-11:43:14.910204 7fa9a6fef6c0 Level-0 table #1284: 0 bytes OK +2026/01/29-11:43:14.916676 7fa9a6fef6c0 Delete type=0 #1282 +2026/01/29-11:43:14.924493 7fa9a6fef6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) diff --git a/packs/antidotes-and-remedes/LOG.old b/packs/antidotes-and-remedes/LOG.old index a6c07740..3ff2a374 100644 --- a/packs/antidotes-and-remedes/LOG.old +++ b/packs/antidotes-and-remedes/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.293766 7f93ea7fc6c0 Recovering log #1255 -2026/01/07-15:09:19.310998 7f93ea7fc6c0 Delete type=3 #1253 -2026/01/07-15:09:19.311072 7f93ea7fc6c0 Delete type=0 #1255 -2026/01/07-15:13:49.675722 7f93e9ffb6c0 Level-0 table #1260: started -2026/01/07-15:13:49.675750 7f93e9ffb6c0 Level-0 table #1260: 0 bytes OK -2026/01/07-15:13:49.682225 7f93e9ffb6c0 Delete type=0 #1258 -2026/01/07-15:13:49.688884 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.356741 7fac27fff6c0 Recovering log #1275 +2026/01/29-10:52:14.366627 7fac27fff6c0 Delete type=3 #1273 +2026/01/29-10:52:14.366686 7fac27fff6c0 Delete type=0 #1275 +2026/01/29-10:55:44.821680 7fa9a6fef6c0 Level-0 table #1280: started +2026/01/29-10:55:44.821714 7fa9a6fef6c0 Level-0 table #1280: 0 bytes OK +2026/01/29-10:55:44.835173 7fa9a6fef6c0 Delete type=0 #1278 +2026/01/29-10:55:44.835325 7fa9a6fef6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) diff --git a/packs/antidotes-and-remedes/MANIFEST-001261 b/packs/antidotes-and-remedes/MANIFEST-001281 similarity index 71% rename from packs/antidotes-and-remedes/MANIFEST-001261 rename to packs/antidotes-and-remedes/MANIFEST-001281 index 65e8a1a4..de2bb0e0 100644 Binary files a/packs/antidotes-and-remedes/MANIFEST-001261 and b/packs/antidotes-and-remedes/MANIFEST-001281 differ diff --git a/packs/apothicarium/001261.log b/packs/apothicarium/001281.log similarity index 100% rename from packs/apothicarium/001261.log rename to packs/apothicarium/001281.log diff --git a/packs/apothicarium/CURRENT b/packs/apothicarium/CURRENT index 736c48be..a1022812 100644 --- a/packs/apothicarium/CURRENT +++ b/packs/apothicarium/CURRENT @@ -1 +1 @@ -MANIFEST-001259 +MANIFEST-001279 diff --git a/packs/apothicarium/LOG b/packs/apothicarium/LOG index 3045df18..fae5d70e 100644 --- a/packs/apothicarium/LOG +++ b/packs/apothicarium/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.564495 7f93eb7fe6c0 Recovering log #1257 -2026/01/07-15:26:43.574446 7f93eb7fe6c0 Delete type=3 #1255 -2026/01/07-15:26:43.574512 7f93eb7fe6c0 Delete type=0 #1257 -2026/01/07-15:53:28.432738 7f93e9ffb6c0 Level-0 table #1262: started -2026/01/07-15:53:28.432770 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK -2026/01/07-15:53:28.439930 7f93e9ffb6c0 Delete type=0 #1260 -2026/01/07-15:53:28.446625 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.977033 7fac3cbfe6c0 Recovering log #1277 +2026/01/29-10:58:42.986296 7fac3cbfe6c0 Delete type=3 #1275 +2026/01/29-10:58:42.986342 7fac3cbfe6c0 Delete type=0 #1277 +2026/01/29-11:43:14.924604 7fa9a6fef6c0 Level-0 table #1282: started +2026/01/29-11:43:14.924660 7fa9a6fef6c0 Level-0 table #1282: 0 bytes OK +2026/01/29-11:43:14.930959 7fa9a6fef6c0 Delete type=0 #1280 +2026/01/29-11:43:14.954971 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) diff --git a/packs/apothicarium/LOG.old b/packs/apothicarium/LOG.old index 3c207ec5..261f4ca4 100644 --- a/packs/apothicarium/LOG.old +++ b/packs/apothicarium/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.333002 7f93ea7fc6c0 Recovering log #1253 -2026/01/07-15:09:19.348597 7f93ea7fc6c0 Delete type=3 #1251 -2026/01/07-15:09:19.348662 7f93ea7fc6c0 Delete type=0 #1253 -2026/01/07-15:13:49.682345 7f93e9ffb6c0 Level-0 table #1258: started -2026/01/07-15:13:49.682371 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK -2026/01/07-15:13:49.688691 7f93e9ffb6c0 Delete type=0 #1256 -2026/01/07-15:13:49.688891 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.382212 7fac27fff6c0 Recovering log #1273 +2026/01/29-10:52:14.391540 7fac27fff6c0 Delete type=3 #1271 +2026/01/29-10:52:14.391602 7fac27fff6c0 Delete type=0 #1273 +2026/01/29-10:55:44.848192 7fa9a6fef6c0 Level-0 table #1278: started +2026/01/29-10:55:44.848229 7fa9a6fef6c0 Level-0 table #1278: 0 bytes OK +2026/01/29-10:55:44.858087 7fa9a6fef6c0 Delete type=0 #1276 +2026/01/29-10:55:44.858262 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) diff --git a/packs/apothicarium/MANIFEST-001259 b/packs/apothicarium/MANIFEST-001279 similarity index 84% rename from packs/apothicarium/MANIFEST-001259 rename to packs/apothicarium/MANIFEST-001279 index 8ba19e3c..c61ee571 100644 Binary files a/packs/apothicarium/MANIFEST-001259 and b/packs/apothicarium/MANIFEST-001279 differ diff --git a/packs/dons-de-rhya/001261.log b/packs/dons-de-rhya/001281.log similarity index 100% rename from packs/dons-de-rhya/001261.log rename to packs/dons-de-rhya/001281.log diff --git a/packs/dons-de-rhya/CURRENT b/packs/dons-de-rhya/CURRENT index 736c48be..a1022812 100644 --- a/packs/dons-de-rhya/CURRENT +++ b/packs/dons-de-rhya/CURRENT @@ -1 +1 @@ -MANIFEST-001259 +MANIFEST-001279 diff --git a/packs/dons-de-rhya/LOG b/packs/dons-de-rhya/LOG index 76750997..c49d3059 100644 --- a/packs/dons-de-rhya/LOG +++ b/packs/dons-de-rhya/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.514726 7f93ea7fc6c0 Recovering log #1257 -2026/01/07-15:26:43.524436 7f93ea7fc6c0 Delete type=3 #1255 -2026/01/07-15:26:43.524498 7f93ea7fc6c0 Delete type=0 #1257 -2026/01/07-15:53:28.406072 7f93e9ffb6c0 Level-0 table #1262: started -2026/01/07-15:53:28.406116 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK -2026/01/07-15:53:28.412401 7f93e9ffb6c0 Delete type=0 #1260 -2026/01/07-15:53:28.419261 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.926104 7fac277fe6c0 Recovering log #1277 +2026/01/29-10:58:42.935779 7fac277fe6c0 Delete type=3 #1275 +2026/01/29-10:58:42.935842 7fac277fe6c0 Delete type=0 #1277 +2026/01/29-11:43:14.916846 7fa9a6fef6c0 Level-0 table #1282: started +2026/01/29-11:43:14.916889 7fa9a6fef6c0 Level-0 table #1282: 0 bytes OK +2026/01/29-11:43:14.924373 7fa9a6fef6c0 Delete type=0 #1280 +2026/01/29-11:43:14.924501 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) diff --git a/packs/dons-de-rhya/LOG.old b/packs/dons-de-rhya/LOG.old index ec7b3b3c..0f3b266f 100644 --- a/packs/dons-de-rhya/LOG.old +++ b/packs/dons-de-rhya/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.258501 7f93eb7fe6c0 Recovering log #1253 -2026/01/07-15:09:19.274117 7f93eb7fe6c0 Delete type=3 #1251 -2026/01/07-15:09:19.274190 7f93eb7fe6c0 Delete type=0 #1253 -2026/01/07-15:13:49.656004 7f93e9ffb6c0 Level-0 table #1258: started -2026/01/07-15:13:49.656029 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK -2026/01/07-15:13:49.662317 7f93e9ffb6c0 Delete type=0 #1256 -2026/01/07-15:13:49.662464 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.331605 7fac3d3ff6c0 Recovering log #1273 +2026/01/29-10:52:14.341908 7fac3d3ff6c0 Delete type=3 #1271 +2026/01/29-10:52:14.341974 7fac3d3ff6c0 Delete type=0 #1273 +2026/01/29-10:55:44.799059 7fa9a6fef6c0 Level-0 table #1278: started +2026/01/29-10:55:44.799092 7fa9a6fef6c0 Level-0 table #1278: 0 bytes OK +2026/01/29-10:55:44.809892 7fa9a6fef6c0 Delete type=0 #1276 +2026/01/29-10:55:44.810048 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) diff --git a/packs/dons-de-rhya/MANIFEST-001259 b/packs/dons-de-rhya/MANIFEST-001279 similarity index 84% rename from packs/dons-de-rhya/MANIFEST-001259 rename to packs/dons-de-rhya/MANIFEST-001279 index 0810de42..43cb95e6 100644 Binary files a/packs/dons-de-rhya/MANIFEST-001259 and b/packs/dons-de-rhya/MANIFEST-001279 differ diff --git a/packs/plats-dauberges/001261.log b/packs/plats-dauberges/001281.log similarity index 100% rename from packs/plats-dauberges/001261.log rename to packs/plats-dauberges/001281.log diff --git a/packs/plats-dauberges/CURRENT b/packs/plats-dauberges/CURRENT index 736c48be..a1022812 100644 --- a/packs/plats-dauberges/CURRENT +++ b/packs/plats-dauberges/CURRENT @@ -1 +1 @@ -MANIFEST-001259 +MANIFEST-001279 diff --git a/packs/plats-dauberges/LOG b/packs/plats-dauberges/LOG index 88ea14aa..661be63b 100644 --- a/packs/plats-dauberges/LOG +++ b/packs/plats-dauberges/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.501310 7f93eb7fe6c0 Recovering log #1257 -2026/01/07-15:26:43.512173 7f93eb7fe6c0 Delete type=3 #1255 -2026/01/07-15:26:43.512224 7f93eb7fe6c0 Delete type=0 #1257 -2026/01/07-15:53:28.398067 7f93e9ffb6c0 Level-0 table #1262: started -2026/01/07-15:53:28.398117 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK -2026/01/07-15:53:28.405830 7f93e9ffb6c0 Delete type=0 #1260 -2026/01/07-15:53:28.412533 7f93e9ffb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.911172 7fac3cbfe6c0 Recovering log #1277 +2026/01/29-10:58:42.922025 7fac3cbfe6c0 Delete type=3 #1275 +2026/01/29-10:58:42.922081 7fac3cbfe6c0 Delete type=0 #1277 +2026/01/29-11:43:14.903068 7fa9a6fef6c0 Level-0 table #1282: started +2026/01/29-11:43:14.903107 7fa9a6fef6c0 Level-0 table #1282: 0 bytes OK +2026/01/29-11:43:14.910024 7fa9a6fef6c0 Delete type=0 #1280 +2026/01/29-11:43:14.924484 7fa9a6fef6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) diff --git a/packs/plats-dauberges/LOG.old b/packs/plats-dauberges/LOG.old index 5ef6bdad..988e2650 100644 --- a/packs/plats-dauberges/LOG.old +++ b/packs/plats-dauberges/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.238733 7f93ebfff6c0 Recovering log #1253 -2026/01/07-15:09:19.256250 7f93ebfff6c0 Delete type=3 #1251 -2026/01/07-15:09:19.256331 7f93ebfff6c0 Delete type=0 #1253 -2026/01/07-15:13:49.649560 7f93e9ffb6c0 Level-0 table #1258: started -2026/01/07-15:13:49.649585 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK -2026/01/07-15:13:49.655885 7f93e9ffb6c0 Delete type=0 #1256 -2026/01/07-15:13:49.662454 7f93e9ffb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.318846 7fac277fe6c0 Recovering log #1273 +2026/01/29-10:52:14.328479 7fac277fe6c0 Delete type=3 #1271 +2026/01/29-10:52:14.328545 7fac277fe6c0 Delete type=0 #1273 +2026/01/29-10:55:44.787338 7fa9a6fef6c0 Level-0 table #1278: started +2026/01/29-10:55:44.787395 7fa9a6fef6c0 Level-0 table #1278: 0 bytes OK +2026/01/29-10:55:44.798087 7fa9a6fef6c0 Delete type=0 #1276 +2026/01/29-10:55:44.798228 7fa9a6fef6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) diff --git a/packs/plats-dauberges/MANIFEST-001259 b/packs/plats-dauberges/MANIFEST-001279 similarity index 83% rename from packs/plats-dauberges/MANIFEST-001259 rename to packs/plats-dauberges/MANIFEST-001279 index 2c588fad..25dc5a73 100644 Binary files a/packs/plats-dauberges/MANIFEST-001259 and b/packs/plats-dauberges/MANIFEST-001279 differ diff --git a/packs/tables-des-traductions/000904.log b/packs/tables-des-traductions/000924.log similarity index 100% rename from packs/tables-des-traductions/000904.log rename to packs/tables-des-traductions/000924.log diff --git a/packs/tables-des-traductions/CURRENT b/packs/tables-des-traductions/CURRENT index 0593d263..44e47ce9 100644 --- a/packs/tables-des-traductions/CURRENT +++ b/packs/tables-des-traductions/CURRENT @@ -1 +1 @@ -MANIFEST-000902 +MANIFEST-000922 diff --git a/packs/tables-des-traductions/LOG b/packs/tables-des-traductions/LOG index 1f1a8565..7444c4e0 100644 --- a/packs/tables-des-traductions/LOG +++ b/packs/tables-des-traductions/LOG @@ -1,7 +1,7 @@ -2026/01/07-15:26:43.552530 7f93eaffd6c0 Recovering log #900 -2026/01/07-15:26:43.562158 7f93eaffd6c0 Delete type=3 #898 -2026/01/07-15:26:43.562231 7f93eaffd6c0 Delete type=0 #900 -2026/01/07-15:53:28.426399 7f93e9ffb6c0 Level-0 table #905: started -2026/01/07-15:53:28.426431 7f93e9ffb6c0 Level-0 table #905: 0 bytes OK -2026/01/07-15:53:28.432585 7f93e9ffb6c0 Delete type=0 #903 -2026/01/07-15:53:28.440113 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) +2026/01/29-10:58:42.964451 7fac3cbfe6c0 Recovering log #920 +2026/01/29-10:58:42.974523 7fac3cbfe6c0 Delete type=3 #918 +2026/01/29-10:58:42.974583 7fac3cbfe6c0 Delete type=0 #920 +2026/01/29-11:43:14.948296 7fa9a6fef6c0 Level-0 table #925: started +2026/01/29-11:43:14.948359 7fa9a6fef6c0 Level-0 table #925: 0 bytes OK +2026/01/29-11:43:14.954859 7fa9a6fef6c0 Delete type=0 #923 +2026/01/29-11:43:14.955000 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) diff --git a/packs/tables-des-traductions/LOG.old b/packs/tables-des-traductions/LOG.old index 48db12cc..8f7f68d1 100644 --- a/packs/tables-des-traductions/LOG.old +++ b/packs/tables-des-traductions/LOG.old @@ -1,7 +1,7 @@ -2026/01/07-15:09:19.313936 7f93eaffd6c0 Recovering log #896 -2026/01/07-15:09:19.330494 7f93eaffd6c0 Delete type=3 #894 -2026/01/07-15:09:19.330571 7f93eaffd6c0 Delete type=0 #896 -2026/01/07-15:13:49.669421 7f93e9ffb6c0 Level-0 table #901: started -2026/01/07-15:13:49.669459 7f93e9ffb6c0 Level-0 table #901: 0 bytes OK -2026/01/07-15:13:49.675608 7f93e9ffb6c0 Delete type=0 #899 -2026/01/07-15:13:49.688874 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) +2026/01/29-10:52:14.369127 7fac277fe6c0 Recovering log #916 +2026/01/29-10:52:14.379523 7fac277fe6c0 Delete type=3 #914 +2026/01/29-10:52:14.379589 7fac277fe6c0 Delete type=0 #916 +2026/01/29-10:55:44.836202 7fa9a6fef6c0 Level-0 table #921: started +2026/01/29-10:55:44.836244 7fa9a6fef6c0 Level-0 table #921: 0 bytes OK +2026/01/29-10:55:44.847287 7fa9a6fef6c0 Delete type=0 #919 +2026/01/29-10:55:44.847494 7fa9a6fef6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) diff --git a/packs/tables-des-traductions/MANIFEST-000902 b/packs/tables-des-traductions/MANIFEST-000922 similarity index 84% rename from packs/tables-des-traductions/MANIFEST-000902 rename to packs/tables-des-traductions/MANIFEST-000922 index 9ab7fd56..0d247734 100644 Binary files a/packs/tables-des-traductions/MANIFEST-000902 and b/packs/tables-des-traductions/MANIFEST-000922 differ diff --git a/scripts/0Uly7OmkH0zqYbxQ.js b/scripts/0Uly7OmkH0zqYbxQ.js index f5229079..7cea037c 100644 --- a/scripts/0Uly7OmkH0zqYbxQ.js +++ b/scripts/0Uly7OmkH0zqYbxQ.js @@ -16,6 +16,6 @@ if (location) let roll = await new Roll("max(1, 1d10 - @system.characteristics.t.bonus)", this.actor).roll() -roll.toMessage(this.script.getChatData({flavor : `${this.effet.name} (Durée)`})); +roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`})); -this.effet.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file +this.effect.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file diff --git a/scripts/190PHSHKGaJ74wsR.js b/scripts/190PHSHKGaJ74wsR.js index 2ada4864..91a50a6c 100644 --- a/scripts/190PHSHKGaJ74wsR.js +++ b/scripts/190PHSHKGaJ74wsR.js @@ -1,6 +1,6 @@ -if (!this.item.name.includes("(") || this.item.system.Tests.value.includes("Terrain") || this.item.system.Tests.value.toLowerCase().includes("(any)")) +if (!this.item.name.includes("(") || this.item.system.tests.value.includes("Terrain") || this.item.system.tests.value.toLowerCase().includes("(any)")) { - let Tests = this.item.system.Tests.value + let Tests = this.item.system.tests.value let name = this.item.name // If name already specifies, make sure Tests value reflects that @@ -26,6 +26,6 @@ if (!this.item.name.includes("(") || this.item.system.Tests.value.includes("Terr } } - this.effet.updateSource({name}) + this.effect.updateSource({name}) this.item.updateSource({name, "system.tests.value" : tests}) } \ No newline at end of file diff --git a/scripts/1CeYp5MlPcH68UIw.js b/scripts/1CeYp5MlPcH68UIw.js index 73f3491f..279dcbda 100644 --- a/scripts/1CeYp5MlPcH68UIw.js +++ b/scripts/1CeYp5MlPcH68UIw.js @@ -83,7 +83,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/1ZArMNUI8qqH6zkX.js b/scripts/1ZArMNUI8qqH6zkX.js index 137943c2..79bbf1c5 100644 --- a/scripts/1ZArMNUI8qqH6zkX.js +++ b/scripts/1ZArMNUI8qqH6zkX.js @@ -1,4 +1,4 @@ -let test = await args.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effet.name, context : {failure: "Gain de 1 état Sonné"}}) +let test = await args.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "Gain de 1 état Sonné"}}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/4MQ7u4INxp51oyyR.js b/scripts/4MQ7u4INxp51oyyR.js index feb325f5..993751ef 100644 --- a/scripts/4MQ7u4INxp51oyyR.js +++ b/scripts/4MQ7u4INxp51oyyR.js @@ -69,7 +69,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/4iu3CmOI19soOYuA.js b/scripts/4iu3CmOI19soOYuA.js index 0004c62d..a518af66 100644 --- a/scripts/4iu3CmOI19soOYuA.js +++ b/scripts/4iu3CmOI19soOYuA.js @@ -44,7 +44,7 @@ for (let trait of traits) -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/4rTmV3TNxctUe0ly.js b/scripts/4rTmV3TNxctUe0ly.js index 83e509ef..a17689d6 100644 --- a/scripts/4rTmV3TNxctUe0ly.js +++ b/scripts/4rTmV3TNxctUe0ly.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effet.name}`}); +let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}); await Test.roll(); if (Test.Échoué) { diff --git a/scripts/4ylzjgUdHY5D0yVh.js b/scripts/4ylzjgUdHY5D0yVh.js index 436668dc..75f330e1 100644 --- a/scripts/4ylzjgUdHY5D0yVh.js +++ b/scripts/4ylzjgUdHY5D0yVh.js @@ -106,7 +106,7 @@ if (ride) items = items.concat({name : "Chaos Steed", type: "trapping", "system.trappingType.value" : "misc"}, skill) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/5JWC0l3JEpOsqbR9.js b/scripts/5JWC0l3JEpOsqbR9.js index b75111be..649abd29 100644 --- a/scripts/5JWC0l3JEpOsqbR9.js +++ b/scripts/5JWC0l3JEpOsqbR9.js @@ -69,7 +69,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/5dR7Erj3nwsxLAV7.js b/scripts/5dR7Erj3nwsxLAV7.js index 30fae575..32805652 100644 --- a/scripts/5dR7Erj3nwsxLAV7.js +++ b/scripts/5dR7Erj3nwsxLAV7.js @@ -69,7 +69,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/6elUNF58TaiYjxcx.js b/scripts/6elUNF58TaiYjxcx.js index f0fd8653..91cd8b6c 100644 --- a/scripts/6elUNF58TaiYjxcx.js +++ b/scripts/6elUNF58TaiYjxcx.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effet.name, context : {failure: "GAin d'1 état Sonné"}}) +let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "GAin d'1 état Sonné"}}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/6qJP0hpShEM43ohx.js b/scripts/6qJP0hpShEM43ohx.js index 3959aff5..726e47eb 100644 --- a/scripts/6qJP0hpShEM43ohx.js +++ b/scripts/6qJP0hpShEM43ohx.js @@ -17,7 +17,7 @@ if (actor.itemTypes.skill.find(s => s.name === "Savoir (Océans)")) { } let Test = await actor.setupSkill('Calme', { - appendTitle: ` – ${this.effet.name}`, + appendTitle: ` – ${this.effect.name}`, skipTargets: true, fields: {difficulty: 'easy'}, characteristic: 'wp', diff --git a/scripts/A6DcKPzAGntzSCil.js b/scripts/A6DcKPzAGntzSCil.js index 3c057d95..12f0abcb 100644 --- a/scripts/A6DcKPzAGntzSCil.js +++ b/scripts/A6DcKPzAGntzSCil.js @@ -2,4 +2,4 @@ let roll = await new Roll("1d10").roll() roll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(", ")}!`})); -this.effet.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file +this.effect.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file diff --git a/scripts/BVNKF9omCppWPLys.js b/scripts/BVNKF9omCppWPLys.js index 553a241e..561b5c7a 100644 --- a/scripts/BVNKF9omCppWPLys.js +++ b/scripts/BVNKF9omCppWPLys.js @@ -16,13 +16,13 @@ let test = await actor.setupCharacteristic("s", { await Test.roll(); if (Test.succeeded) { let SL = parseInt(Test.result.SL); - let name = this.effet.name.replace(/\d+/, rating => parseInt(rating) - SL); - await this.effet.update({name}); + let name = this.effect.name.replace(/\d+/, rating => parseInt(rating) - SL); + await this.effect.update({name}); } -let rating = parseInt(this.effet.name.match(/\d+/)?.[0]); +let rating = parseInt(this.effect.name.match(/\d+/)?.[0]); if (rating <= 1) { - const scriptData = this.effet.system.scriptData + const scriptData = this.effect.system.scriptData scriptData[2].trigger = ''; - await this.effet.update({disabled: true, "system.scriptData": scriptData}); + await this.effect.update({disabled: true, "system.scriptData": scriptData}); } \ No newline at end of file diff --git a/scripts/Bu0KUpGvfmFF7LJs.js b/scripts/Bu0KUpGvfmFF7LJs.js index 3b86af03..123aafc4 100644 --- a/scripts/Bu0KUpGvfmFF7LJs.js +++ b/scripts/Bu0KUpGvfmFF7LJs.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("s", {appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "difficult"}}); +let test = await this.actor.setupCharacteristic("s", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "difficult"}}); await Test.roll(); diff --git a/scripts/ETfmit2Cx0Py77ai.js b/scripts/ETfmit2Cx0Py77ai.js index cbb98a38..2a809a2a 100644 --- a/scripts/ETfmit2Cx0Py77ai.js +++ b/scripts/ETfmit2Cx0Py77ai.js @@ -41,7 +41,7 @@ let traits = [ {name:`, {permanent : true}) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/EdTChmSouS0MSmk5.js b/scripts/EdTChmSouS0MSmk5.js index c9ff27eb..7ddc9a01 100644 --- a/scripts/EdTChmSouS0MSmk5.js +++ b/scripts/EdTChmSouS0MSmk5.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effet.name}`}) +let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await Test.roll(); if (Test.succeeded) { diff --git a/scripts/FPYNcxm21678boLT.js b/scripts/FPYNcxm21678boLT.js index f52f8b02..d2f7dd7d 100644 --- a/scripts/FPYNcxm21678boLT.js +++ b/scripts/FPYNcxm21678boLT.js @@ -3,12 +3,12 @@ if (args.attackerTest.data.preData.characteristic !== "s") return; const SL = args.opposedTest.data.opposeResult.differenceSL; -const targetId = this.effet.getFlag("wfrp4e", "target"); +const targetId = this.effect.getFlag("wfrp4e", "target"); const target = canvas.scene.tokens.get(targetId); if (SL > 4) { args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été forcé de laisser partir ${target.name}.`); - return await this.effet.delete(); + return await this.effect.delete(); } if (SL > 0) { diff --git a/scripts/Fu8DTvSgLufcB5mr.js b/scripts/Fu8DTvSgLufcB5mr.js index 58af1110..2e0dde5d 100644 --- a/scripts/Fu8DTvSgLufcB5mr.js +++ b/scripts/Fu8DTvSgLufcB5mr.js @@ -24,7 +24,7 @@ async function rollTable(characteristics, formula, name) { } const characteristics = new Set(); -await rollTable(characteristics, "2d10", this.effet.name) +await rollTable(characteristics, "2d10", this.effect.name) if (characteristics.has("*")) { characteristics.delete("*"); @@ -41,4 +41,4 @@ if (characteristics.has("*")) { characteristics.add(result); } -this.effet.setFlag("wfrp4e", "characteristicsToSwap", Array.from(characteristics)); \ No newline at end of file +this.effect.setFlag("wfrp4e", "characteristicsToSwap", Array.from(characteristics)); \ No newline at end of file diff --git a/scripts/Jjq3oPYbI26zjxME.js b/scripts/Jjq3oPYbI26zjxME.js index 903534af..c2d4dab1 100644 --- a/scripts/Jjq3oPYbI26zjxME.js +++ b/scripts/Jjq3oPYbI26zjxME.js @@ -18,4 +18,4 @@ let roll = await new Roll("1d10").roll() roll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(", ")}!`})); -this.effet.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file +this.effect.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file diff --git a/scripts/KGK9vL1Yl0qmCeCN.js b/scripts/KGK9vL1Yl0qmCeCN.js index 0edca31b..bf2f0e63 100644 --- a/scripts/KGK9vL1Yl0qmCeCN.js +++ b/scripts/KGK9vL1Yl0qmCeCN.js @@ -27,7 +27,7 @@ else if (choice.length) { - let changes = foundry.utils.deepClone(this.effet.changes); + let changes = foundry.utils.deepClone(this.effect.changes); for(let training of choice) { @@ -62,7 +62,7 @@ if (choice.length) case "guard" : let territorial = await fromUuid("Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do"); - await this.actor.createEmbeddedDocuments("Item", [territorial], {fromEffect: this.effet.id}) + await this.actor.createEmbeddedDocuments("Item", [territorial], {fromEffect: this.effect.id}) foundry.utils.setProperty(args, "options.keepId", true); break; @@ -83,6 +83,6 @@ if (choice.length) break; } } - this.effet.updateSource({name : `${this.effet.name} (${choice.map(i => i.name).join(", ")})`, changes, "flags.wfrp4e.trained" : choice.map(i => i.id)}) + this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(", ")})`, changes, "flags.wfrp4e.trained" : choice.map(i => i.id)}) this.item.updateSource({"system.specification.value" : `${choice.map(i => i.name).join(", ")}`}) } \ No newline at end of file diff --git a/scripts/KVpDUEjHhd3nLa0f.js b/scripts/KVpDUEjHhd3nLa0f.js index 81d3f979..c8d7509b 100644 --- a/scripts/KVpDUEjHhd3nLa0f.js +++ b/scripts/KVpDUEjHhd3nLa0f.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effet.name}`}) +let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/KmngDrPD72xn22kZ.js b/scripts/KmngDrPD72xn22kZ.js index 2418a1a1..4a2a5355 100644 --- a/scripts/KmngDrPD72xn22kZ.js +++ b/scripts/KmngDrPD72xn22kZ.js @@ -1,5 +1,5 @@ if (this.actor.Species.toLowerCase() != "skaven") { - this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Utilise ${this.effet.name}`, fields: { difficulty: "difficult" } }).then(async Test => { + this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Utilise ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async Test => { await Test.roll() if (Test.Échoué) { diff --git a/scripts/LXEUhHuXe8keEPI9.js b/scripts/LXEUhHuXe8keEPI9.js index 22920c26..60170469 100644 --- a/scripts/LXEUhHuXe8keEPI9.js +++ b/scripts/LXEUhHuXe8keEPI9.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {fields: {difficulty : "average"}, skipTargets: true, appendTitle : ` - ${this.effet.name}`}) +let test = await this.actor.setupCharacteristic("wp", {fields: {difficulty : "average"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/MnqQkXVp20Lw84I1.js b/scripts/MnqQkXVp20Lw84I1.js index 774f012e..c7b0fec2 100644 --- a/scripts/MnqQkXVp20Lw84I1.js +++ b/scripts/MnqQkXVp20Lw84I1.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "difficult"}}) +let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "difficult"}}) await test.roll(); if (test.failed) { diff --git a/scripts/Msygc7oQQPB5fw0b.js b/scripts/Msygc7oQQPB5fw0b.js index 159a3009..d4c5f305 100644 --- a/scripts/Msygc7oQQPB5fw0b.js +++ b/scripts/Msygc7oQQPB5fw0b.js @@ -8,7 +8,7 @@ if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100)) } else { - let points = this.effet.sourceTest.result.overcast.usage.other.current; + let points = this.effect.sourceTest.result.overcast.usage.other.current; this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value - points}) this.script.message(`Perd de ${points} de Corruption`) } \ No newline at end of file diff --git a/scripts/N8hA6ysHCTlLd8Kj.js b/scripts/N8hA6ysHCTlLd8Kj.js index 34b9945f..a92f5171 100644 --- a/scripts/N8hA6ysHCTlLd8Kj.js +++ b/scripts/N8hA6ysHCTlLd8Kj.js @@ -70,7 +70,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/TGN070HeJLl3gSMY.js b/scripts/TGN070HeJLl3gSMY.js index 833b521a..5fc066ca 100644 --- a/scripts/TGN070HeJLl3gSMY.js +++ b/scripts/TGN070HeJLl3gSMY.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, context: { failure: "Goes Prone" }}) +let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: "Goes Prone" }}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/TpZItJ5Ugbazaobd.js b/scripts/TpZItJ5Ugbazaobd.js index 8cd7d1c3..414537ba 100644 --- a/scripts/TpZItJ5Ugbazaobd.js +++ b/scripts/TpZItJ5Ugbazaobd.js @@ -12,4 +12,4 @@ while (locations.length < 2) locationText = locations.map(i => game.wfrp4e.config.locations[i]).join(", ") this.item.updateSource({name : this.item.name += ` (${locationText})`, "flags.wfrp4e.locations" : locations}) -this.effet.updateSource({"flags.wfrp4e.locations" : locations}) \ No newline at end of file +this.effect.updateSource({"flags.wfrp4e.locations" : locations}) \ No newline at end of file diff --git a/scripts/UQtXuQmUlTyDKqhe.js b/scripts/UQtXuQmUlTyDKqhe.js index 6ddeab24..34ddf5aa 100644 --- a/scripts/UQtXuQmUlTyDKqhe.js +++ b/scripts/UQtXuQmUlTyDKqhe.js @@ -138,6 +138,6 @@ arcane.forEach(i => { }) let spells = [...petty, ...necromancy, ...arcane]; -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items.concat(spells)); diff --git a/scripts/V4PcjtHde941wv6J.js b/scripts/V4PcjtHde941wv6J.js index 9a26b26a..68c8c285 100644 --- a/scripts/V4PcjtHde941wv6J.js +++ b/scripts/V4PcjtHde941wv6J.js @@ -8,7 +8,7 @@ if (stunned > this.actor.system.characteristics.t.bonus) { const Test = await this.actor.setupSkill(game.i18n.localize("NAME.Cool"), { skipTargets: true, - appendTitle: ` - ${this.effet.name}`, + appendTitle: ` - ${this.effect.name}`, fields: {difficulty: "average"}, context: {failure: `Encaisse ${crit} à la tête.`} }) diff --git a/scripts/V9zm2hKUVLVZtAcN.js b/scripts/V9zm2hKUVLVZtAcN.js index d987925f..3b5230f0 100644 --- a/scripts/V9zm2hKUVLVZtAcN.js +++ b/scripts/V9zm2hKUVLVZtAcN.js @@ -142,7 +142,7 @@ for (let spell of spells) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/YJX7WnxzXXIVdH6P.js b/scripts/YJX7WnxzXXIVdH6P.js index 4eeef7e3..33e36861 100644 --- a/scripts/YJX7WnxzXXIVdH6P.js +++ b/scripts/YJX7WnxzXXIVdH6P.js @@ -25,7 +25,7 @@ filters = [ } ] -let arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effet.name, text : "Choisissez 12 Sorts d'Arcane"}) +let arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effect.name, text : "Choisissez 12 Sorts d'Arcane"}) let items = petty.map(i => i.toObject()).concat(arcane.map(i => { let spell = i.toObject(); diff --git a/scripts/YN8719gme9AxYtyY.js b/scripts/YN8719gme9AxYtyY.js index d082f85a..5aa45843 100644 --- a/scripts/YN8719gme9AxYtyY.js +++ b/scripts/YN8719gme9AxYtyY.js @@ -96,7 +96,7 @@ if (ride) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/a7pEvCycVnFBXGAQ.js b/scripts/a7pEvCycVnFBXGAQ.js index 41350b77..b56d7562 100644 --- a/scripts/a7pEvCycVnFBXGAQ.js +++ b/scripts/a7pEvCycVnFBXGAQ.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("i", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "easy"}}) +let test = await this.actor.setupCharacteristic("i", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "easy"}}) await Test.roll(); if (!Test.succeeded) diff --git a/scripts/aeBetniKqq5SD9Ou.js b/scripts/aeBetniKqq5SD9Ou.js index cda2bf26..e5cd3167 100644 --- a/scripts/aeBetniKqq5SD9Ou.js +++ b/scripts/aeBetniKqq5SD9Ou.js @@ -83,7 +83,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) console.log(">>>>>>><", items) diff --git a/scripts/bEVlJOOA1kLlzpWx.js b/scripts/bEVlJOOA1kLlzpWx.js index b72f0df8..92d0eee8 100644 --- a/scripts/bEVlJOOA1kLlzpWx.js +++ b/scripts/bEVlJOOA1kLlzpWx.js @@ -70,7 +70,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/cUnbADgOQ4fMKgrH.js b/scripts/cUnbADgOQ4fMKgrH.js index 6a4b7db2..12fc0713 100644 --- a/scripts/cUnbADgOQ4fMKgrH.js +++ b/scripts/cUnbADgOQ4fMKgrH.js @@ -11,8 +11,8 @@ else { group = await ValueDialog.create({text : "Entrez le Groupe de Haine", title : "Groupe de Haine"}) - this.item.updateSource({name : this.item.name + ` (${group})`, "system.tests.value" : this.item.system.Tests.value.replace("Group", group)}) - this.effet.updateSource({name : this.effet.name + ` (${group})`}) + this.item.updateSource({name : this.item.name + ` (${group})`, "system.tests.value" : this.item.system.tests.value.replace("Group", group)}) + this.effect.updateSource({name : this.effect.name + ` (${group})`}) } diff --git a/scripts/dZ4c5pKDqQV02aIK.js b/scripts/dZ4c5pKDqQV02aIK.js index 360a8a39..3a5ebde3 100644 --- a/scripts/dZ4c5pKDqQV02aIK.js +++ b/scripts/dZ4c5pKDqQV02aIK.js @@ -1,4 +1,4 @@ if (args.effect.conditionId == "ablaze") { - args.data.formula += ` + parseInt(this.effet.sourceTest.result.SL)` + args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)` } \ No newline at end of file diff --git a/scripts/ekjJQHyMbZT2vqdc.js b/scripts/ekjJQHyMbZT2vqdc.js index 44bf61c1..4911d711 100644 --- a/scripts/ekjJQHyMbZT2vqdc.js +++ b/scripts/ekjJQHyMbZT2vqdc.js @@ -4,6 +4,6 @@ this.script.notification(`Utilisé ${uses} fois`) this.item.setFlag("wfrp4e", "uses", uses); if (uses >= 3) { - this.effet.update({"system.transferData.type" : "other"}) + this.effect.update({"system.transferData.type" : "other"}) this.script.notification(`Utilisé`); } diff --git a/scripts/f4vvAGQ8OGoEbrgy.js b/scripts/f4vvAGQ8OGoEbrgy.js index 41058d68..95654d05 100644 --- a/scripts/f4vvAGQ8OGoEbrgy.js +++ b/scripts/f4vvAGQ8OGoEbrgy.js @@ -8,7 +8,7 @@ if (SL >= 3) difficulty = "vhard" -let test = await args.actor.setupCharacteristic("wp", {fields: {difficulty}, skipTargets: true, appendTitle : " - " + this.effet.name, context : {failure: "Reçoit un état Sonné"}}) +let test = await args.actor.setupCharacteristic("wp", {fields: {difficulty}, skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "Reçoit un état Sonné"}}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/fq2fqlWlrVfitkcB.js b/scripts/fq2fqlWlrVfitkcB.js index b4dc06c3..601fe7a7 100644 --- a/scripts/fq2fqlWlrVfitkcB.js +++ b/scripts/fq2fqlWlrVfitkcB.js @@ -41,7 +41,7 @@ let traits = [ {name:`, {permanent : true}) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/g0SzfsLyW7aD2F19.js b/scripts/g0SzfsLyW7aD2F19.js index 2d23b8ca..cba0fcff 100644 --- a/scripts/g0SzfsLyW7aD2F19.js +++ b/scripts/g0SzfsLyW7aD2F19.js @@ -11,7 +11,7 @@ if (this.item.system.tests.value.includes("(Groupe social)")) } else { - let value = await ValueDialog.create({text : "Entrez le Groupe d'Étiquette", title : this.effet.name}); + let value = await ValueDialog.create({text : "Entrez le Groupe d'Étiquette", title : this.effect.name}); if (value) { name = `${name.split("(")[0].trim()} (${value})` diff --git a/scripts/g4t56A09yrpZaJQ2.js b/scripts/g4t56A09yrpZaJQ2.js index 3bb9308f..0bcd87b5 100644 --- a/scripts/g4t56A09yrpZaJQ2.js +++ b/scripts/g4t56A09yrpZaJQ2.js @@ -1,6 +1,6 @@ let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed); amberTalons.name = "Serres d'ambre"; - amberTalons.img = this.effet.img; + amberTalons.img = this.effect.img; amberTalons.system.damage.value = "SB + WPB" amberTalons.system.equipped = true; amberTalons.system.qualities.value.push({name : "magical"}) diff --git a/scripts/ga6bQzPuoIiQQrKg.js b/scripts/ga6bQzPuoIiQQrKg.js index c1ee6aa6..2d3c447d 100644 --- a/scripts/ga6bQzPuoIiQQrKg.js +++ b/scripts/ga6bQzPuoIiQQrKg.js @@ -1,7 +1,7 @@ if (args.totalWoundLoss > 0) { - let test = await args.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "hard"}}) + let test = await args.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "hard"}}) await test.roll() if (test.failed) { diff --git a/scripts/groEX1wJ9l00PkDF.js b/scripts/groEX1wJ9l00PkDF.js index 305ae186..29c488df 100644 --- a/scripts/groEX1wJ9l00PkDF.js +++ b/scripts/groEX1wJ9l00PkDF.js @@ -12,15 +12,15 @@ if (turns > 0) { return this.script.message(`

${speaker.alias} continue de s'enrouler autour de ${target.name}. Il pourra commencer à écraser dans ${turns} tours.

`); } -if (this.actor.items.find(i => i.type === "extendedTest" && i.name === this.effet.name)) { +if (this.actor.items.find(i => i.type === "extendedTest" && i.name === this.effect.name)) { this.script.message(`

${speaker.alias} peut reprendre l'écrasement de ${target.name} avec le Test Étendu.

`); return; } const extendedTestData = { - name: this.effet.name, + name: this.effect.name, type: "extendedTest", - img: this.effet.img, + img: this.effect.img, system: { SL: { current: 0, @@ -38,7 +38,7 @@ const extendedTestData = { } }; -const extendedTests = await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effet.id}); +const extendedTests = await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id}); const extendedTest = extendedTests[0]; this.script.message(`

${speaker.alias} a fini de s'enrouler autour de ${target.name}. Il peut maintenant commencer à écraser via le Test Étendu @UUID[${extendedTest.uuid}].

`); diff --git a/scripts/h766UvswLCsxcMow.js b/scripts/h766UvswLCsxcMow.js index be93438e..bee27cac 100644 --- a/scripts/h766UvswLCsxcMow.js +++ b/scripts/h766UvswLCsxcMow.js @@ -116,7 +116,7 @@ for (let spell of spells) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/hL3JUSY3xMA4zj2Q.js b/scripts/hL3JUSY3xMA4zj2Q.js index 0893281e..b06b3f20 100644 --- a/scripts/hL3JUSY3xMA4zj2Q.js +++ b/scripts/hL3JUSY3xMA4zj2Q.js @@ -2,7 +2,7 @@ if (this.sourceActor.uuid === this.actor.uuid) return; const test = await this.actor.setupCharacteristic("t", { skipTargets: true, - appendTitle: ` — ${this.effet.name}`, + appendTitle: ` — ${this.effect.name}`, fields: { difficulty: "difficult" }, diff --git a/scripts/iNAQJa5HyaEckknX.js b/scripts/iNAQJa5HyaEckknX.js index e1c3e062..396f3977 100644 --- a/scripts/iNAQJa5HyaEckknX.js +++ b/scripts/iNAQJa5HyaEckknX.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effet.name}`}) +let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await Test.roll(); diff --git a/scripts/jsgLEVYvMieyYT6L.js b/scripts/jsgLEVYvMieyYT6L.js index 6cda6696..8946e9ae 100644 --- a/scripts/jsgLEVYvMieyYT6L.js +++ b/scripts/jsgLEVYvMieyYT6L.js @@ -1,7 +1,7 @@ let tokenImg = ""; // Put path to token image here, inbetween the quotation marks if (tokenImg) { - if (this.effet.getFlag("wfrp4e", "transformed")) + if (this.effect.getFlag("wfrp4e", "transformed")) { await this.effect.setFlag("wfrp4e", "transformed", false); this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); diff --git a/scripts/lII4KMRblqwFBlsV.js b/scripts/lII4KMRblqwFBlsV.js index b45b1017..c36c9ceb 100644 --- a/scripts/lII4KMRblqwFBlsV.js +++ b/scripts/lII4KMRblqwFBlsV.js @@ -116,7 +116,7 @@ for (let spell of spells) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/lmBAZCtofsC8hHHG.js b/scripts/lmBAZCtofsC8hHHG.js index 8309bc03..89cc11a4 100644 --- a/scripts/lmBAZCtofsC8hHHG.js +++ b/scripts/lmBAZCtofsC8hHHG.js @@ -18,7 +18,7 @@ do { if (!choice) break; const roll = new Roll("1d10"); - await roll.toMessage({flavor: this.effet.name}); + await roll.toMessage({flavor: this.effect.name}); if (roll.total >= 7) { SL = -1; @@ -28,4 +28,4 @@ do { SL++; } while (true); -this.effet.setFlag("wfrp4e", "SL", SL); \ No newline at end of file +this.effect.setFlag("wfrp4e", "SL", SL); \ No newline at end of file diff --git a/scripts/lvjcddwRiN9iGruy.js b/scripts/lvjcddwRiN9iGruy.js index 7497bbd9..ee2559e0 100644 --- a/scripts/lvjcddwRiN9iGruy.js +++ b/scripts/lvjcddwRiN9iGruy.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("t", { appendTitle: ` - ${this.effet.name}`, fields: { difficulty: "challenging" } }) +let test = await this.actor.setupCharacteristic("t", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: "challenging" } }) await Test.roll(); if (Test.Échoué) diff --git a/scripts/nqWu0ZplxzRiUEAg.js b/scripts/nqWu0ZplxzRiUEAg.js index 596f0c46..2b6a2bae 100644 --- a/scripts/nqWu0ZplxzRiUEAg.js +++ b/scripts/nqWu0ZplxzRiUEAg.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effet.name}`}) +let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await Test.roll(); // Kind of insane but whatever diff --git a/scripts/oTXPA6rbPnYOKNmo.js b/scripts/oTXPA6rbPnYOKNmo.js index c682d551..8791b9c0 100644 --- a/scripts/oTXPA6rbPnYOKNmo.js +++ b/scripts/oTXPA6rbPnYOKNmo.js @@ -108,7 +108,7 @@ if (ride) items = items.concat({name : "Chaos Steed", type: "trapping", "system.trappingType.value" : "misc"}, skill) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) console.log(">>>>>>><", items) diff --git a/scripts/okW06V9UiPC4Vcrn.js b/scripts/okW06V9UiPC4Vcrn.js index d00f57e9..e7841205 100644 --- a/scripts/okW06V9UiPC4Vcrn.js +++ b/scripts/okW06V9UiPC4Vcrn.js @@ -69,7 +69,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/rpxQU26BU7nwjtqY.js b/scripts/rpxQU26BU7nwjtqY.js index 84cd61a5..8a74178e 100644 --- a/scripts/rpxQU26BU7nwjtqY.js +++ b/scripts/rpxQU26BU7nwjtqY.js @@ -1,5 +1,5 @@ let location = this.item.system.location.key -let test = await this.actor.setupCharacteristic("dex", {context : {failure : `${this.effect.name}: Lâchez l'objet!`}, skipTargets: true, appendTitle : " - " + this.effet.name, fields : {difficulty : "average"}}) +let test = await this.actor.setupCharacteristic("dex", {context : {failure : `${this.effect.name}: Lâchez l'objet!`}, skipTargets: true, appendTitle : " - " + this.effect.name, fields : {difficulty : "average"}}) await Test.roll(); diff --git a/scripts/svCqdytEOtqFXCcs.js b/scripts/svCqdytEOtqFXCcs.js index e9f9a88a..31dfdc53 100644 --- a/scripts/svCqdytEOtqFXCcs.js +++ b/scripts/svCqdytEOtqFXCcs.js @@ -96,7 +96,7 @@ if (ride) } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); diff --git a/scripts/sx7Ikn8WW00gBFb4.js b/scripts/sx7Ikn8WW00gBFb4.js index 8b867e06..6b950beb 100644 --- a/scripts/sx7Ikn8WW00gBFb4.js +++ b/scripts/sx7Ikn8WW00gBFb4.js @@ -9,7 +9,7 @@ else if (location == "rArm") this.script.notification("Bras Droit") } -this.effet.updateSource({"flags.wfrp4e.location" : location}); +this.effect.updateSource({"flags.wfrp4e.location" : location}); if (location) { @@ -29,4 +29,4 @@ let roll = await new Roll("1d10").roll() roll.toMessage(this.script.getChatData({flavor : `Lâche ${dropped.map(i => i.name).join(", ")}!`})); -this.effet.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file +this.effect.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file diff --git a/scripts/sz0PqS1kroMOzUZk.js b/scripts/sz0PqS1kroMOzUZk.js index ce6b9fe1..bec2036d 100644 --- a/scripts/sz0PqS1kroMOzUZk.js +++ b/scripts/sz0PqS1kroMOzUZk.js @@ -83,7 +83,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) console.log(">>>>>>><", items) diff --git a/scripts/tCIT1a12Gt6k2ohA.js b/scripts/tCIT1a12Gt6k2ohA.js index 8b2d5ed0..1a55082e 100644 --- a/scripts/tCIT1a12Gt6k2ohA.js +++ b/scripts/tCIT1a12Gt6k2ohA.js @@ -3,19 +3,19 @@ if (this.item.name.includes("(") && !this.item.name.toLowerCase().includes("(any { resistance = this.item.parenthesesText } -else +else { - resistance = await ValueDialog.create({text : "Entrez la Résistance", title : "Résistance"}) - + resistance = await ValueDialog.create({text : "Entrez la Résistance", title : "Résistance"}) + if (resistance) { this.item.updateSource({name : `${this.item.name.split("(")[0].trim()} (${resistance})`}) - this.effet.updateSource({name : this.effet.name + ` (${resistance})`}) + this.effect.updateSource({name : this.effect.name + ` (${resistance})`}) } -} -this.item.updateSource({"system.tests.value" : this.item.system.Tests.value.replace("the associated Threat", resistance)}) +} +this.item.updateSource({"system.tests.value" : this.item.system.tests.value?.replace("la Menace associée", resistance) || resistance}) -if (resistance && !this.effet.name.includes("(")) +if (resistance && !this.effect.name.includes("(")) { this.effect.updateSource({name : this.effect.name += ` (${resistance})`}) } \ No newline at end of file diff --git a/scripts/ulXfbycWUu36vdmS.js b/scripts/ulXfbycWUu36vdmS.js index 48dac2d9..cb1dc63e 100644 --- a/scripts/ulXfbycWUu36vdmS.js +++ b/scripts/ulXfbycWUu36vdmS.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "difficult", slBonus : -1 * this.effet.sourceTest.result.SL}}) +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "difficult", slBonus : -1 * this.effect.sourceTest.result.SL}}) await Test.roll(); if (Test.succeeded) { diff --git a/scripts/vJQRBxDfPwHens0a.js b/scripts/vJQRBxDfPwHens0a.js index 34037421..d1cadba1 100644 --- a/scripts/vJQRBxDfPwHens0a.js +++ b/scripts/vJQRBxDfPwHens0a.js @@ -1,6 +1,6 @@ if (args.totalWoundLoss > 0) { - args.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields: { difficulty: "difficult" } }).then(async Test => { + args.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async Test => { await Test.roll(); if (Test.Échoué) { diff --git a/scripts/vS2D9QUslR7ZtXXm.js b/scripts/vS2D9QUslR7ZtXXm.js index af1ce05e..43b15df0 100644 --- a/scripts/vS2D9QUslR7ZtXXm.js +++ b/scripts/vS2D9QUslR7ZtXXm.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "hard"}}) +let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "hard"}}) await Test.roll(); if (Test.Échoué) { diff --git a/scripts/whUSkaR1yem21bXp.js b/scripts/whUSkaR1yem21bXp.js index f27ec9a3..988e04f4 100644 --- a/scripts/whUSkaR1yem21bXp.js +++ b/scripts/whUSkaR1yem21bXp.js @@ -142,7 +142,7 @@ for (let spell of spells) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) this.actor.createEmbeddedDocuments("Item", items); \ No newline at end of file diff --git a/scripts/x1Ecj6MXY94kpcQq.js b/scripts/x1Ecj6MXY94kpcQq.js index d1db43a1..00690007 100644 --- a/scripts/x1Ecj6MXY94kpcQq.js +++ b/scripts/x1Ecj6MXY94kpcQq.js @@ -2,7 +2,7 @@ if (!this.item.equipped.value) { return this.script.notification(`Vous devez équiper le ${this.item.name} pour récupérer des points de blessures.`,"info") } -const runesOfRestoration = this.item.effects.contents.filter(e => e.name == this.effet.name) +const runesOfRestoration = this.item.effects.contents.filter(e => e.name == this.effect.name) const restorationWounds = parseInt(runesOfRestoration.length * this.actor.system.characteristics.t.bonus) this.actor.modifyWounds(restorationWounds) diff --git a/scripts/xklncIMwQIespDxS.js b/scripts/xklncIMwQIespDxS.js index 0e957200..458ebb38 100644 --- a/scripts/xklncIMwQIespDxS.js +++ b/scripts/xklncIMwQIespDxS.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty : "vhard"}}); +let test = await this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "vhard"}}); await Test.roll(); CorruptionMessageModel.createCorruptionMessage("minor", this.script.getChatData()) diff --git a/scripts/y3F1K1sYBymPZCjz.js b/scripts/y3F1K1sYBymPZCjz.js index a942a8f2..743131be 100644 --- a/scripts/y3F1K1sYBymPZCjz.js +++ b/scripts/y3F1K1sYBymPZCjz.js @@ -85,7 +85,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) console.log(">>>>>>><", items) diff --git a/scripts/yCgH3N9AurIiAv0i.js b/scripts/yCgH3N9AurIiAv0i.js index 7c6635de..eb9f0cd4 100644 --- a/scripts/yCgH3N9AurIiAv0i.js +++ b/scripts/yCgH3N9AurIiAv0i.js @@ -1,6 +1,6 @@ -if (!this.item.name.includes("(") || this.item.system.Tests.value.includes("(Sense)") || this.item.system.Tests.value.toLowerCase().includes("(any)")) +if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sense)") || this.item.system.tests.value.toLowerCase().includes("(any)")) { - let Tests = this.item.system.Tests.value + let Tests = this.item.system.tests.value let name = this.item.name // If name already specifies, make sure Tests value reflects that diff --git a/scripts/ynoHNXXCGRS6fTqF.js b/scripts/ynoHNXXCGRS6fTqF.js index 1a156fec..4ecc3600 100644 --- a/scripts/ynoHNXXCGRS6fTqF.js +++ b/scripts/ynoHNXXCGRS6fTqF.js @@ -19,7 +19,7 @@ let hitloc = await game.wfrp4e.tables.rollTable("hitloc") let value = hitloc.result let desc = hitloc.description -this.effet.updateSource({"flags.wfrp4e.location" : value}) +this.effect.updateSource({"flags.wfrp4e.location" : value}) msg += ` alors que des yeux sortent de leur ${desc}` diff --git a/scripts/z8mwLihZQu0JtUHY.js b/scripts/z8mwLihZQu0JtUHY.js index 91180760..d6d3ae1a 100644 --- a/scripts/z8mwLihZQu0JtUHY.js +++ b/scripts/z8mwLihZQu0JtUHY.js @@ -88,7 +88,7 @@ for (let trapping of trappings) } } -updateObj.name = updateObj.name += " " + this.effet.name +updateObj.name = updateObj.name += " " + this.effect.name await this.actor.update(updateObj) console.log(">>>>>>><", items)