{ "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(": "+ this.effet.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(", "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(": "+ this.effet.name\n\nawait this.actor.update(updateObj)\nconsole.log(", "Added Bleeding": "Saignement ajouté", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty :": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty :", "Fatigued added to": "Fatigued Ajouté to", "which cannot be removed until the Malaise symptom is gone.": "which Impossible de be Retiré until the Malaise symptom is gone.", ")}!`}));\n\nthis.effect.updateSource({": ")}!`}));\n\nthis.effet.updateSource({", "Lore (Magic)": "Savoir (Magie)", ")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name +=": ")}) \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 +=", "})\n this.script.message(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(": "})\n this.script.message(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually Retiré.`, \n {whisper: ChatMessage.getWhisperRecipients(", ",\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.message(": ",\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.effect.name, context : {failure:": "+ this.effet.name, context : {failure:", "Choose Characteristic": "Choisir Characteristic", ": this.item.system.tests.value.replace(": ": this.item.system.Tests.value.replace(", ") || this.item.system.tests.value.includes(": ") || this.item.system.Tests.value.includes(", ") || this.item.system.tests.value.toLowerCase().includes(": ") || this.item.system.Tests.value.toLowerCase().includes(", "))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(": "))\n{\n let Tests = this.item.system.Tests.value\n let name = this.item.name\n\n // If name already specifies, make sure Tests value reflects that\n if (name.includes(", ",\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait test.roll();\n\nif (!test.succeeded) {\n test.result.other.push(": ",\n skipTargets: true,\n fields: {difficulty: 'easy'},\n characteristic: 'wp',\n});\nawait Test.roll();\n\nif (!Test.succeeded) {\n Test.result.other.push(", "Dark Magic (Necromancy)": "Magie Noire (Nécromancie)", "action-link critical": "action-link critical", "all forms": "toutes formes", ")})\n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name +=": ")})\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 +=", ";\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:": ";\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:", "}})\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(": "}})\nawait Test.roll();\nif (Test.Échoué)\n{\n args.actor.addCondition(", "}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(": "}})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(", "Choose a Condition": "Choisir a Condition", "

\n Select your choice\n

\n
    \n
  1. Mail
  2. \n
  3. Mail & Leather
  4. \n
  5. Plate
  6. \n
": "

\n Sélectionner your choice\n

\n
    \n
  1. Mail
  2. \n
  3. Mail & Leather
  4. \n
  5. Plate
  6. \n
", "})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(": "})\n await Test.roll();\n if (Test.Échoué)\n {\n this.actor.addCondition(", "critical-roll": "Critique-roll", ").pop())\n\nif (ones > SL)\n args.test.result.other.push(` SL)\n args.Test.result.other.push(` {\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": ").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", ", [territorial], {fromEffect: this.effect.id})\n foundry.utils.setProperty(args,": ", [territorial], {fromEffect: this.effet.id})\n foundry.utils.setProperty(args,", "})\n break;\n }\n }\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(": "})\n break;\n }\n }\n this.effet.updateSource({name : `${this.effet.name} (${choice.map(i => i.name).join(", ";\n\n let wounds = foundry.utils.duplicate(this.actor.status.wounds);\n let regenRoll = await new Roll(": ";\n\n let Blessures = foundry.utils.duplicate(this.actor.status.Blessures);\n let regenRoll = await new Roll(", ").roll({allowInteractive : false});\n let regen = regenRoll.total;\n\n if (wounds.value >= wounds.max)\n return;\n\n if (wounds.value > 0) {\n wounds.value += Math.floor(regen / 2);\n if (wounds.value > wounds.max) {\n wounds.value = wounds.max;\n }\n message += \\`\\${this.actor.name} regagne \\${regen} Blessures.\\`;\n\n if (regen === 10) {\n message +=": ").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 +=", ";\n }\n } else if (regen >= 8) {\n message += \\`\\${this.actor.name} a obtenu un \\${regen} et regagne 1 Blessure.\\`;\n wounds.value += 1;\n if (regen === 10) {\n message +=": ";\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 +=", ": wounds});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(": ": Blessures});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(", ")});\n`\n\nawait effect.update({\n name,": ")});\n`\n\nawait effet.update({\n name,", ";\n wounds.value += 1;\n if (regen === 10) {\n message += \"
De plus, il régénère une Blessure Critique.\";\n }\n } else {\n message += \\": ";\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 += \\", ";\n }\n\n await this.actor.update({\"system.status.wounds\": wounds});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(\"GM\")});": ";\n }\n\n await this.actor.update({\"system.status.Blessures\": Blessures});\n this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(\"GM\")});", ")\n}\n\nthis.effect.updateSource({": ")\n}\n\nthis.effet.updateSource({", ")[0].trim()} (${resistance})`})\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\n }\n} \nthis.item.updateSource({": ")[0].trim()} (${resistance})`})\n this.effet.updateSource({name : this.effet.name + ` (${resistance})`})\n }\n} \nthis.item.updateSource({", ", resistance)})\n\nif (resistance && !this.effect.name.includes(": ", resistance)})\n\nif (resistance && !this.effet.name.includes(", "})\n this.effect.updateSource({name : this.effect.name +": "})\n this.effet.updateSource({name : this.effet.name +", "})\n }\n} \nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\n\nif (resistance && !this.effect.name.includes(\"(\"))\n{\n this.effect.updateSource({name : this.effect.name +=": "})\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.effet.updateSource({name : this.effet.name +=", ")\n }\n }\n\n this.effect.updateSource({name})\n this.item.updateSource({name,": ")\n }\n }\n\n this.effet.updateSource({name})\n this.item.updateSource({name,", "é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 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": "é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", "Skipping Tests to apply the tattoos": "Tests ignorés pour appliquer les tatouages", "

Apply Ward of Grimnir effect?

": "

Apply Ward of Grimnir effet?

", "No Lore (Theology) skill found, cannot pass.": "Compétence Savoir (Théologie) introuvable, impossible de continuer.", "No Lore (Runes) skill found, cannot pass.": "Compétence Savoir (Runes) introuvable, impossible de continuer.", "One or more Tests to apply the tattoos failed.": "Un ou plusieurs Tests pour appliquer les tatouages ont échoué.", ", fields : {difficulty : \"vhard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n}\nelse \n{\n this.script.notification(\"No Lore (Theology) skill found, cannot pass.\")\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 :": ", fields : {difficulty : \"vhard\"}})\n await Test.roll();\n if (Test.Échoué)\n {\n Échoué = true;\n }\n}\nelse \n{\n this.script.notification(\"No Lore (Theology) Compétence found, Impossible de pass.\")\n Échoué = true;\n}\n\nif (this.actor.itemTags.Compétence.find(i => i.name == \"Lore (Runes)\"))\n {\n let Test = await this.actor.setupSkill(\"Lore (Runes)\", {appendTitle :", ", fields : {difficulty : \"hard\"}})\n await test.roll();\n if (test.failed)\n {\n failed = true;\n }\n }\n else \n {\n this.script.notification(\"No Lore (Runes) skill found, cannot pass.\")\n failed = true;\n }\n\n\n let test = await this.actor.setupSkill(\"Art (Tattooing)\", {appendTitle :": ", fields : {difficulty : \"hard\"}})\n await Test.roll();\n if (Test.Échoué)\n {\n Échoué = true;\n }\n }\n else \n {\n this.script.notification(\"No Lore (Runes) Compétence found, Impossible de pass.\")\n Échoué = true;\n }\n\n\n let Test = await this.actor.setupSkill(\"Art (Tattooing)\", {appendTitle :", ")\n let configBlessings = await Promise.all((game.wfrp4e.config.godBlessings[god.toLowerCase()] || []).map(fromUuid));\n if (god ==": ")\n let configBlessings = await Promise.tout((game.wfrp4e.config.godBlessings[god.toLowerCase()] || []).map(fromUuid));\n if (god ==", "))\n await this.actor.addEffectItems(blessings.map(i => i.uuid), this.effect)\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(": "))\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(", ", group)})\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(": ", group)})\n\tthis.effet.updateSource({name : this.effet.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(", ", \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\n\tthis.effect.updateSource({name : this.effect.name +": ", \"system.Tests.value\" : this.item.system.Tests.value.replace(\"Group\", group)})\n\tthis.effet.updateSource({name : this.effet.name +", "attrait du Léviathan.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet test = await actor.setupSkill(": "attrait du Léviathan.`);\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill(", ", {\n appendTitle: ` – ${this.effect.name}`,\n skipTargets: true,\n fields: {difficulty:": ", {\n appendTitle: ` – ${this.effet.name}`,\n skipTargets: true,\n fields: {difficulty:", ");\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet test = await actor.setupSkill('Calme', {\n appendTitle:": ");\n loreTest.renderRollCard();\n return;\n }\n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle:", ", this.effect.name)\n\nif (characteristics.has(": ", this.effet.name)\n\nif (characteristics.has(", ", availableChoices);\n\n if (!result) return;\n\n characteristics.add(result);\n}\n\nthis.effect.setFlag(": ", availableChoices);\n\n if (!result) return;\n\n characteristics.add(result);\n}\n\nthis.effet.setFlag(", ").roll({allowInteractive : false});\nlet regen = regenRoll.total;\n\nif (wounds.value >= wounds.max)\n return\n\nif (wounds.value > 0) \n{\n wounds.value += regen\n if (wounds.value > wounds.max)\n {\n wounds.value = wounds.max\n }\n message += `${this.actor.name} regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `${this.actor.name} rolled a ${regen} and regains 1 Wound.`\n wounds.value += 1\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse \n{\n message += `${this.actor.name} Régénération roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({": ").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} regains ${regen} Blessures.`\n\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critique Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `${this.actor.name} rolled a ${regen} and regains 1 Wound.`\n Blessures.value += 1\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critique Wound.`\n }\n}\nelse \n{\n message += `${this.actor.name} Régénération roll of ${regen} - No effet.`\n}\n\nawait this.actor.update({", ": wounds })\nthis.script.message(message, { whisper: ChatMessage.getWhisperRecipients(": ": Blessures })\nthis.script.message(message, { whisper: ChatMessage.getWhisperRecipients(", "wounds.value += 1\n if (regen == 10)\n {\n message +=": "Blessures.value += 1\n if (regen == 10)\n {\n message +=", ",\n value: /^((?!\\().)*$/gm, // Remove all spells with parentheses (all arcane spells spells)\n regex: true\n },\n {\n property :": ",\n value: /^((?!\\().)*$/gm, // Remove tout spells with parentheses (tout arcane spells spells)\n regex: true\n },\n {\n property :", "+ this.effect.name\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(": "+ this.effet.name\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(", "> Critical`;\n \n const test = await this.actor.setupSkill(game.i18n.localize(": "> Critique`;\n \n const Test = await this.actor.setupSkill(game.i18n.localize(", "), {\n skipTargets: true,\n appendTitle: ` - ${this.effect.name}`,\n fields: {difficulty:": "), {\n skipTargets: true,\n appendTitle: ` - ${this.effet.name}`,\n fields: {difficulty:", " Critical": " Critique", "Must provide a Master Rune": "Doit fournir une Rune Maîtresse", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Must provide a Master Rune\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text :": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit provide a Master Rune\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text :", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Must provide a Master Rune\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text :": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit provide a Master Rune\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text :", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Must provide a Master Rune\"});\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:": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && item.system.master, onError: \"Doit provide a Master Rune\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effet)\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.effet.name}, content:", "Must provide a Rune (non-Master)": "Doit fournir une Rune (non-Maîtresse)", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Must provide a Rune (non-Master)\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text :": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit provide a Rune (non-Master)\"});\n }\n }\n else \n {\n rune = await DragDialog.create({text :", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Must provide a Rune (non-Master)\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text :": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit provide a Rune (non-Master)\"});\n }\n}\nelse \n{\n rune = await DragDialog.create({text :", ", title : this.effect.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Must provide a Rune (non-Master)\"});\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:": ", title : this.effet.name, filter: (item) => item.type == \"wfrp4e-dwarfs.rune\" && !item.system.master, onError: \"Doit provide a Rune (non-Master)\"});\n}\n\nthis.actor.addEffectItems(rune.uuid, this.effet)\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.effet.name}, content:", ", title : this.effect.name});\n if (value)\n {\n name = `${name.split(": ", title : this.effet.name});\n if (value)\n {\n name = `${name.split(", ")[0].trim()} (${value})`\n tests = this.item.system.tests.value.replace(": ")[0].trim()} (${value})`\n Tests = this.item.system.Tests.value.replace(", "}\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 =": "}\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 =", ");\n}\n\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\n this.script.message(": ");\n}\n\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effet.name)) {\n this.script.message(", ");\n\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.wounds.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(": ");\n\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(", ");\n\nlet effect = {\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\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 await effect.delete();": ");\n await effet.delete();", ", {\n skipTargets: true, \n appendTitle: ` — ${this.effect.name}`, \n fields: {\n difficulty:": ", {\n skipTargets: true, \n appendTitle: ` — ${this.effet.name}`, \n fields: {\n difficulty:", ",\n }\n});\n\nawait test.roll();\nif (test.failure) {\n await this.actor.addCondition(": ",\n }\n});\n\nawait Test.roll();\nif (Test.failure) {\n await this.actor.addCondition(", "}. Do you want to roll d10?

\n

1–6: add +1 SL

\n

7–10: lose all accrued SLs and perform next Test at –1 SL

\n \n`;\n const choice = await foundry.applications.api.DialogV2.confirm({\n yes: {label:": "}. Do you want to roll d10?

\n

1–6: add +1 SL

\n

7–10: lose tout accrued SLs and perform next Test at –1 SL

\n \n`;\n const choice = await foundry.applications.api.DialogV2.confirm({\n yes: {label:", ");\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(": ");\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(", ", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty:": ", { appendTitle: ` - ${this.effet.name}`, fields: { difficulty:", "} })\nawait test.roll();\n\nif (test.failed) \n{\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\n let currentAge = parseInt(this.actor.system.details.age.value)\n\n let inline = ` 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,": "}\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,", ", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty :": ", {appendTitle : ` - ${this.effet.name}`, fields : {difficulty :", "}});\n\nawait test.roll();\n\nif (test.failed)\n{\n\n if (test.isCriticalFumble ==": "}});\n\nawait Test.roll();\n\nif (Test.Échoué)\n{\n\n if (Test.isCriticalFumble ==", ", fields : {difficulty : \"difficult\"}});\n\nawait test.roll();\n\nif (test.failed)\n{\n\n if (test.isCriticalFumble == \"fumble\")\n {\n\t return this.script.message(": ", 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(", ");\n loreTest.renderRollCard();\n return;\n } \n}\n\nlet test = await actor.setupSkill('Calme', {\n appendTitle:": ");\n loreTest.renderRollCard();\n return;\n } \n}\n\nlet Test = await actor.setupSkill('Calme', {\n appendTitle:", ", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty:": ", {skipTargets: true, appendTitle : ` - Used ${this.effet.name}`, fields: { difficulty:", "} }).then(async test => {\n await test.roll()\n if (test.failed) \n {\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n this.actor.update({": "} }).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({", ", fields: { difficulty: \"difficult\" } }).then(async test => {\n await test.roll()\n if (test.failed) \n {\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\n this.script.message(": ", 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(", ": 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 skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type ==": ": 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 ==", ")\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(": ")\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(", "

\n Select your choice\n

\n
    \n
  1. Melee (Basic)
  2. \n
  3. Melee (Two-Handed)
  4. \n
": "

\n Sélectionner your choice\n

\n
    \n
  1. Melee (Basic)
  2. \n
  3. Melee (Two-Handed)
  4. \n
", "Choose Qualities to add": "Choisir Qualities to add", "Choose Flaws to remove": "Choisir Flaws to remove", ", {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 ==": ", {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 ==", "})\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(": "})\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(", "

Damage all Items carried?

": "

Damage tout Items carried?

", "Choose Optional Traits": "Choisir Optional Traits", "You must target exactly one Boat.": "You Doit target exactly one Boat.", ": []});\n msg += `

${item.name} loses all Qualities

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

${item.name} crumbles into dust!

` \n await item.update({name : item.name +": ": []});\n msg += `

${item.name} loses tout Qualities

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

${item.name} crumbles into dust!

` \n await item.update({name : item.name +", "}});\nawait test.roll();\nCorruptionMessageModel.createCorruptionMessage(": "}});\nawait Test.roll();\nCorruptionMessageModel.createCorruptionMessage(", ", this.script.getChatData())\n\nif (test.failed)\n{\n this.actor.addCondition(": ", this.script.getChatData())\n\nif (Test.Échoué)\n{\n this.actor.addCondition(", ")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effect.updateSource({": ")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effet.updateSource({", "EFFECT.CreatureBackInWater": "Effet.CreatureBackInWater", "EFFECT.CreatureOutOfWater": "Effet.CreatureOutOfWater", ": 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(": ": 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\n let talents = (await Promise.tout([game.wfrp4e.tables.rollTable(", ";\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:": ";\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:", "}\n});\n\nawait test.roll();\n\nif (test.failed) {\n args.actor.addCondition(\"poisoned\");\n const speaker = ChatMessage.getSpeaker({actor: args.actor});\n this.script.message(": "}\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(", ")})\n if (args.test.failed && this.actor.type ==": ")})\n if (args.Test.Échoué && this.actor.type ==", "Set Liquid Fortification effect duration to 1 hour.": "Set Liquid Fortification effet duration to 1 hour.", "Reset Liquid Fortification effect duration to 1 hour.": "Reset Liquid Fortification effet duration to 1 hour.", "Choose Symptoms": "Choisir Symptoms", "&& args.test.failed && args.test.result.SL <= -3)\n{\n this.script.notification(": "&& args.Test.Échoué && args.Test.result.SL <= -3)\n{\n this.script.notification(", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n this.script.message(": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\nif (Test.succeeded)\n{\n this.script.message(", "This Actor does not know any runes.": "This Actor does not know tout runes.", ") return;\n\nconst SL = args.opposedTest.data.opposeResult.differenceSL;\n\nconst targetId = this.effect.getFlag(": ") return;\n\nconst SL = args.opposedTest.data.opposeResult.differenceSL;\n\nconst targetId = this.effet.getFlag(", ");\n return await this.effect.delete();\n}\n\nif (SL > 0) {\n args.opposedTest.data.opposeResult.other.push(": ");\n return await this.effet.delete();\n}\n\nif (SL > 0) {\n args.opposedTest.data.opposeResult.other.push(", ";\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:": ";\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:", "All Effects have been used. Reset to select them again": "Tout Effects have been used. Reset to Sélectionner them again", "Choose Power to Gain": "Choisir Power to Gain", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ";\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:": ";\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:", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure:": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, context: { failure:", "}\n});\n\nawait test.roll();\n\nif (test.failed) {\n const SL = Number(test.result.SL);\n this.script.message(": "}\n});\n\nawait Test.roll();\n\nif (Test.Échoué) {\n const SL = Number(Test.result.SL);\n this.script.message(", ": locations})\nthis.effect.updateSource({": ": locations})\nthis.effet.updateSource({", ";\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:": ";\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:", "s name\nawait effect.update({\n name,\n \"system.scriptData\": scriptData\n});\n\n\n// update Trait": "s name\nawait effet.update({\n name,\n \"system.scriptData\": scriptData\n});\n\n\n// update Trait", ";\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:": ";\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:", "]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effect.name, text :": "]\n }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effet.name, text :", ";\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:": ";\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:", ";\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:": ";\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:", "}})\nawait test.roll();\n\nif (!test.succeeded)\n{\n\tthis.actor.addCondition(": "}})\nawait Test.roll();\n\nif (!Test.succeeded)\n{\n\tthis.actor.addCondition(", "}});\nawait test.roll();\n\nif (test.failed)\n{\n await this.actor.addCondition(": "}});\nawait Test.roll();\n\nif (Test.Échoué)\n{\n await this.actor.addCondition(", ";\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:": ";\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:", "; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effect.getFlag(": "; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effet.getFlag(", ";\n\t\t\targs.test.result.description =": ";\n\t\t\targs.Test.result.description =", "}\n\t\targs.test.result.outcome =": "}\n\t\targs.Test.result.outcome =", "Failed Trade (Engineering)": "Échoué Trade (Engineering)", ";\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:": ";\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:", ") \n{\n if (args.test.failed)\n {\n let item = await fromUuid(": ") \n{\n if (args.Test.Échoué)\n {\n let item = await fromUuid(", ";\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:": ";\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:", ";\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:": ";\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:", ") \n{\n if (args.test.failed)\n {\n this.actor.createEmbeddedDocuments(": ") \n{\n if (args.Test.Échoué)\n {\n this.actor.createEmbeddedDocuments(", "]])\n this.script.message(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(": "]])\n this.script.message(`Willpower Test Échoué, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(", "}\n \n args.test.result.other.push (": "}\n \n args.Test.result.other.push (", ";\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:": ";\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:", ").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet test = new Roll(`${rolls.join(": ").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet Test = new Roll(`${rolls.join(", ")\n\nlet test = new Roll(": ")\n\nlet Test = new Roll(", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty:": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields: { difficulty:", "} }).then(async test => {\n await test.roll();\n if (test.failed) \n {\n await args.actor.addCondition(": "} }).then(async Test => {\n await Test.roll();\n if (Test.Échoué) \n {\n await args.actor.addCondition(", "}})\nawait test.roll();\nif (test.failed)\n{\n let roll = await new Roll(": "}})\nawait Test.roll();\nif (Test.Échoué)\n{\n let roll = await new Roll(", ";\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:": ";\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:", "

Does the vessel have a magazine or any other kind of store for blackpowder?

": "

Does the vessel have a magazine or tout other kind of store for blackpowder?

", ";\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:": ";\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:", ";\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:": ";\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:", "this.script.message(msg)\n\nlet test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle :": "this.script.message(msg)\n\nlet Test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle :", "Choose Location": "Choisir Location", "Hatred (All enemies)": "Hatred (Tout enemies)", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`});\nawait Test.roll();\nif (Test.Échoué)\n{\n this.actor.addCondition(", ")\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.test.addSL(value);\n args.test.preData.other.push(": ")\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.Test.addSL(value);\n args.Test.preData.other.push(", "

This Talent also extends to any metal object because of Metallic Affinity

": "

This Talent also extends to tout metal object because of Metallic Affinity

", "Halve Damage? (Halves all damage other than fire, cold, and magic)": "Halve Damage? (Halves tout damage other than fire, cold, and magic)", "Choose Limb": "Choisir Limb", "Effect Used": "Effet Used", "must make a Willpower Test or fall @Condition[Prone].": "Doit make a Willpower Test or fall @Condition[Prone].", "Cannot remove Blinded condition.": "Impossible de remove Blinded condition.", "Removed Fatigued": "Retiré Fatigued", "})\nawait test.roll();\n\nif (test.failed) {\n \tthis.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));\n this.script.scriptMessage(": "})\nawait Test.roll();\n\nif (Test.Échoué) {\n \tthis.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));\n this.script.scriptMessage(", "Cannot move or act this Turn": "Impossible de move or act this Turn", "Select Wind": "Sélectionner Wind", ")\n bleeding.delete(); \n}\nelse \n{\n this.script.notification(": ")\n Saignement.delete(); \n}\nelse \n{\n this.script.notification(", "Choose a Skill": "Choisir a Compétence", ") \n{\n if (args.test.failed)\n {\n this.actor.addSystemEffect(": ") \n{\n if (args.Test.Échoué)\n {\n this.actor.addSystemEffect(", ",\n}\n\nlet test = await args.actor.setupSkill(": ",\n}\n\nlet Test = await args.actor.setupSkill(", "Cannot be Surprised": "Impossible de be Surprised", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`})\nawait Test.roll();\nif (Test.Échoué)\n{\n this.script.message(await game.wfrp4e.tables.formatChatRoll(", "}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\n\tthis.actor.addCondition(": "}, 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(", ")\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(": ")\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(", "})\nawait test.roll();\nif (test.failed)\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(": "})\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(", "Choose the Critical Wounds to heal (cannot reattach body parts)": "Choisir the Critique Blessures to heal (Impossible de reattach body parts)", "Choose Taille": "Choisir Taille", "Cannot attack targets that are not Entangled": "Impossible de attack targets that are not Entangled", ").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n if (ones > SL) {\n args.test.data.result.SL =": ").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n if (ones > SL) {\n args.Test.data.result.SL =", "Gained 2 Bleeding Conditions": "Gained 2 Saignement Conditions", "Choose a Disease": "Choisir a Disease", "});\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg =": "});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg =", ")\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(": ")\n }\n else if (this.actor.characteristics.int.bonus + Number(args.Test.result.SL) < 0)\n {\n args.Test.result.other.push(", "});\nawait test.roll();\n\nif (test.failed) {\n this.actor.addCondition('stunned');\n}\n\nthis.script.scriptNotification(": "});\nawait Test.roll();\n\nif (Test.Échoué) {\n this.actor.addCondition('stunned');\n}\n\nthis.script.scriptNotification(", "Added Fatigued": "Ajouté Fatigued", "t use this.effect because it thinks it": "t use this.effet because it thinks it", "Halve Damage? (Halves Damage from all fire)": "Halve Damage? (Halves Damage from tout fire)", "Can only be applied to River Troll.": "Can only be Appliqué to River Troll.", "+ parseInt(this.effect.sourceTest.result.SL)": "+ parseInt(this.effet.sourceTest.result.SL)", ")\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effect.update({\"system.transferData.type\" : \"other\"})\n\tthis.script.notification(": ")\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effet.update({\"system.transferData.type\" : \"other\"})\n\tthis.script.notification(", "Wounds Healed": "Blessures Healed", "Choose a Weapon": "Choisir a Weapon", "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 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", ")\n args.test.preData.reversal = {allowed: true, if:": ")\n args.Test.preData.reversal = {allowed: true, if:", ", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty :": ", {skipTargets: true, appendTitle : ` - ${this.effet.name}`, fields : {difficulty :", "}});\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg =": "}});\nawait Test.roll();\nif (Test.Échoué)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg =", "Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location": "Can roll on the @Table[crithead]{Head Critique Hits} instead of the normal hit location", "hast)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"skill\",\n name : \"Mêlée (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. Mêlée (Base)
  2. \n
  3. Mêlée (Arme d": "hast)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"Compétence\",\n name : \"Mêlée (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. Mêlée (Base)
    2. \n
    3. Mêlée (Arme d", "Rune of Goblin Bane: Impact Added": "Rune of Goblin Bane: Impact Ajouté", "Enter Grim value": "Entrer Grim value", ", {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 ==": ", {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 ==", "Cannot suffer Critical Wounds": "Impossible de suffer Critique Blessures", "Rolled and applied mutations": "Rolled and Appliqué mutations", ")\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(": ")\n }\n else if (this.actor.characteristics.int.bonus + Number(args.Test.result.SL) < 0)\n {\n args.Test.result.other.push(", ").pop())\n\n if (ones > SL) {\n args.test.data.result.SL =": ").pop())\n\n if (ones > SL) {\n args.Test.data.result.SL =", "Cannot be surprised": "Impossible de be surprised", "Removed 1 Bleeding Condition": "Retiré 1 Saignement Condition", "}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\nawait test.roll();\n\n\nif (location && test.failed)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.notification(": "}, 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(", ").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n\n if (ones > SL) {\n args.test.data.result.SL =": ").pop())\n\n if (ones == 0) {\n ones = 10;\n }\n\n\n if (ones > SL) {\n args.Test.data.result.SL =", ", fields : {difficulty : \"difficult\", slBonus : -1 * this.effect.sourceTest.result.SL}})\nawait test.roll();\nif (test.succeeded)\n{\n\tthis.script.notification(": ", fields : {difficulty : \"difficult\", slBonus : -1 * this.effet.sourceTest.result.SL}})\nawait Test.roll();\nif (Test.succeeded)\n{\n\tthis.script.notification(", "Target has higher Willpower, no effect": "Target has higher Willpower, no effet", "Choose a disease to heal (must be naturally occuring)": "Choisir a disease to heal (Doit be naturally occuring)", "|| this.item.getFlag(": "|| this.item.getFlag(", "Removed Broken": "Condition Brisé supprimée", "Does not need to make Peur or Terror tests": "N'a pas besoin de faire de tests de Peur ou de Terreur", ",\"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(": ",\"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(", "Automatically passes any": "Réussit automatiquement tout" }