[
  {
    "file": "KGK9vL1Yl0qmCeCN.js",
    "count": 12,
    "strings": [
      "Choose Training",
      ").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",
      ": \n                let roll = await new Roll(",
      ").roll({allowInteractive : false});   \n                roll.toMessage(this.script.getChatData());\n                changes.push({value : roll.total, mode : 2, key :",
      "})\n\n                if (this.actor.type ==",
      ")\n                {\n                    let bestial = this.actor.itemTypes.trait.find(i => i.name ==",
      ");\n                    if (bestial)\n                    {\n                        bestial.update({",
      ");\n                await this.actor.createEmbeddedDocuments(",
      ", [territorial], {fromEffect: this.effect.id})\n                foundry.utils.setProperty(args,",
      "})\n                break;\n        }\n    }\n    this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(",
      ": choice.map(i => i.id)})\n    this.item.updateSource({",
      ", changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\n    this.item.updateSource({\"system.specification.value\" :"
    ]
  },
  {
    "file": "5XAYjiq1i4M7Ky7j.js",
    "count": 9,
    "strings": [
      ";\n\n  let wounds = foundry.utils.duplicate(this.actor.status.wounds);\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 += \\`<b>\\${this.actor.name}</b> regagne \\${regen} Blessures.\\`;\n\n    if (regen === 10) {\n      message +=",
      ";\n    }\n  } else if (regen >= 8) {\n    message += \\`<b>\\${this.actor.name}</b> a obtenu un \\${regen} et regagne 1 Blessure.\\`;\n    wounds.value += 1;\n    if (regen === 10) {\n      message +=",
      ";\n    }\n  } else {\n    message += \\`<b>\\${this.actor.name}</b> Résultat de régénération de \\${regen} - Aucun effet.\\`;\n  }\n\n  await this.actor.update({",
      ": wounds});\n  this.script.message(message, {whisper: ChatMessage.getWhisperRecipients(",
      ")});\n`\n\nawait effect.update({\n  name,",
      ";\n\n    if (regen === 10) {\n      message += \"<br>De plus, il régénère une Blessure Critique.\";\n    }\n  } else if (regen >= 8) {\n    message += \\",
      ";\n    wounds.value += 1;\n    if (regen === 10) {\n      message += \"<br>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\")});"
    ]
  },
  {
    "file": "sx7Ikn8WW00gBFb4.js",
    "count": 8,
    "strings": [
      ")\n{\n\tthis.script.notification(",
      ")\n}\nelse if (location ==",
      ")\n}\n\nthis.effect.updateSource({",
      ": 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(`Dropped ${dropped.map(i => i.name).join(",
      ")}!`)\n        for(let weapon of dropped)\n        {\n            await weapon.system.toggleEquip();\n        }\n    }\n}\n\nlet roll = await new Roll(",
      ").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Dropped ${dropped.map(i => i.name).join(",
      ")}!`}));\n\nthis.effect.updateSource({",
      ")\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 :"
    ]
  },
  {
    "file": "tCIT1a12Gt6k2ohA.js",
    "count": 8,
    "strings": [
      ") && !this.item.name.toLowerCase().includes(",
      "))\n{\n\tresistance = this.item.parenthesesText\n}\nelse \n{\n    resistance = await ValueDialog.create({text :",
      "}) \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({",
      ": this.item.system.tests.value.replace(",
      ", resistance)})\n\nif (resistance && !this.effect.name.includes(",
      "})\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.effect.name.includes(\"(\"))\n{\n    this.effect.updateSource({name : this.effect.name +="
    ]
  },
  {
    "file": "yCgH3N9AurIiAv0i.js",
    "count": 8,
    "strings": [
      ") || this.item.system.tests.value.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(",
      ")[0].trim()} (${sense})`;\n    }\n    else // If no sense specified, provide dialog choice\n    {\n        let choice = await ItemDialog.create(ItemDialog.objectToArray({\n            taste :",
      "}, this.item.img), 1, {title : this.item.name, text :",
      "});\n        if (choice[0])\n        {\n            name = `${name.split(",
      ")[0].trim()} (${choice[0].name})`\n        }\n    }\n\n        this.item.updateSource({name,",
      ";\n    }\n    else // If no sense specified, provide dialog choice\n    {\n        let choice = await ItemDialog.create(ItemDialog.objectToArray({\n            taste : \"Taste\",\n            sight : \"Sight\",\n            smell : \"Smell\",\n            hearing : \"Hearing\",\n            touch : \"Touch\"\n        }, this.item.img), 1, {title : this.item.name, text : \"Choisissez un Sens\"});\n        if (choice[0])\n        {\n            name ="
    ]
  },
  {
    "file": "190PHSHKGaJ74wsR.js",
    "count": 7,
    "strings": [
      ") || this.item.system.tests.value.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(",
      ", terrain)\n    }\n    else // If no sense specified, provide dialog choice\n    {\n        let choice = await ItemDialog.create(ItemDialog.objectToArray({\n            coastal :",
      "}, this.item.img), 1,",
      ");\n        if (choice[0])\n        {\n            name = `${name.split(",
      ")\n        }\n    }\n\n    this.effect.updateSource({name})\n    this.item.updateSource({name,"
    ]
  },
  {
    "file": "H06Ysj7oPiemW7S6.js",
    "count": 7,
    "strings": [
      "}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n    let term = {1 :",
      "}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n    let dieAmount = {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 !=",
      ") // Don't roll for gold, just use standing value\n    {\n        dieAmount = dieAmount +",
      ";\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(`<a class=",
      "><strong>Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}</strong></a>`, {whisper : ChatMessage.getWhisperRecipients(",
      "this.script.message("
    ]
  },
  {
    "file": "V9zm2hKUVLVZtAcN.js",
    "count": 7,
    "strings": [
      "Forêt d'épines",
      "}`).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(",
      "é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",
      ").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(",
      ", {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(",
      ", {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 +"
    ]
  },
  {
    "file": "bNhpJPWwoHLq68zD.js",
    "count": 7,
    "strings": [
      "Skipping Tests to apply the tattoos",
      "<p>Apply Ward of Grimnir effect?</p>",
      "No Lore (Theology) skill found, cannot pass.",
      "No Lore (Runes) skill found, cannot pass.",
      "One or more Tests to apply the tattoos failed.",
      ", 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 : \"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 :"
    ]
  },
  {
    "file": "IupskvzvoGyD2H5o.js",
    "count": 6,
    "strings": [
      ")\n    let configBlessings = await Promise.all((game.wfrp4e.config.godBlessings[god.toLowerCase()] || []).map(fromUuid));\n    if (god ==",
      "})\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(",
      "))\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        this.item.updateSource({name: this.item.name.replace(",
      ", god)});\n    else\n        this.item.updateSource({name: this.item.name + ` (${god})`});\n    await this.actor.update({",
      ")\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 +"
    ]
  },
  {
    "file": "cUnbADgOQ4fMKgrH.js",
    "count": 6,
    "strings": [
      "))\n{\n\tgroup = this.item.parenthesesText\n}\n\nelse \n{\n\tgroup = await ValueDialog.create({text :",
      "})\n\n\tthis.item.updateSource({name : this.item.name + ` (${group})`,",
      ": this.item.system.tests.value.replace(",
      ", group)})\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(",
      ", group);\nawait this.actor.createEmbeddedDocuments(",
      ", \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\n\tthis.effect.updateSource({name : this.effect.name +"
    ]
  },
  {
    "file": "h766UvswLCsxcMow.js",
    "count": 6,
    "strings": [
      "}`).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(",
      "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(",
      ", {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 +",
      ").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(",
      ", {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("
    ]
  },
  {
    "file": "lII4KMRblqwFBlsV.js",
    "count": 6,
    "strings": [
      "}`).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(",
      "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(",
      ", {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 +",
      ").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(",
      ", {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("
    ]
  },
  {
    "file": "6qJP0hpShEM43ohx.js",
    "count": 5,
    "strings": [
      "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    skipTargets: true,\n    fields: {difficulty: 'hard'},\n    characteristic: 'int',\n  });\n  await loreTest.roll();\n\n  if (loreTest.succeeded) {\n    loreTest.result.other.push(",
      ");\n    loreTest.renderRollCard();\n    return;\n  }\n}\n\nlet test = await actor.setupSkill('Calme',  {\n  appendTitle:",
      ",\n  skipTargets: true,\n  fields: {difficulty: 'easy'},\n  characteristic: 'wp',\n});\nawait test.roll();\n\nif (!test.succeeded) {\n  test.result.other.push("
    ]
  },
  {
    "file": "Fu8DTvSgLufcB5mr.js",
    "count": 5,
    "strings": [
      "; break;\n      default: continue;\n    }\n\n    if (characteristics.has(characteristic)) {\n      await rollTable(characteristics,",
      ", name);\n    } else {\n      characteristics.add(characteristic);\n    }\n  }\n}\n\nconst characteristics = new Set();\nawait rollTable(characteristics,",
      ", this.effect.name)\n\nif (characteristics.has(",
      ");\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:",
      ", availableChoices);\n\n  if (!result) return;\n\n  characteristics.add(result);\n}\n\nthis.effect.setFlag("
    ]
  },
  {
    "file": "OGX4BneaYAnV25TO.js",
    "count": 5,
    "strings": [
      ").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 += `<b>${this.actor.name}</b> regains ${regen} Wounds.`\n\n    if (regen == 10)\n    {\n        message += `<br>Additionally, they regenerate a Critical Wound.`\n    }\n}\nelse if (regen >= 8) \n{\n    message += `<b>${this.actor.name}</b> rolled a ${regen} and regains 1 Wound.`\n    wounds.value += 1\n    if (regen == 10)\n    {\n        message += `<br>Additionally, they regenerate a Critical Wound.`\n    }\n}\nelse \n{\n    message += `<b>${this.actor.name}</b> Régénération roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({",
      ": wounds })\nthis.script.message(message, { whisper: ChatMessage.getWhisperRecipients(",
      "}\n}\nelse if (regen >= 8) \n{\n    message +=",
      "wounds.value += 1\n    if (regen == 10)\n    {\n        message +=",
      "}\n}\nelse \n{\n    message +="
    ]
  },
  {
    "file": "UQtXuQmUlTyDKqhe.js",
    "count": 5,
    "strings": [
      "Lore (Magic)",
      "Dark Magic (Necromancy)",
      ",\n        value: /^((?!\\().)*$/gm, // Remove all spells with parentheses (all arcane spells spells)\n        regex: true\n    },\n    {\n        property :",
      "+ this.effect.name\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "V4PcjtHde941wv6J.js",
    "count": 5,
    "strings": [
      "action-link critical",
      "></i> Critical</a>`;\n  \n  const test = await this.actor.setupSkill(game.i18n.localize(",
      "), {\n    skipTargets: true,\n    appendTitle: ` - ${this.effect.name}`,\n    fields: {difficulty:",
      "<a data-action=\"clickTable\" class=\"action-link critical\" data-table=\"crithead\" data-modifier=\"0\"><i class=\"fas fa-list\"></i> Critical</a>",
      ",\n    fields: {difficulty: \"average\"},\n    context: {failure:"
    ]
  },
  {
    "file": "VOc9sKag2Vy4vGGZ.js",
    "count": 5,
    "strings": [
      "all forms",
      "Must provide a Master Rune",
      ", 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.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.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:"
    ]
  },
  {
    "file": "WsN2R1qOzuLa2qyB.js",
    "count": 5,
    "strings": [
      "all forms",
      "Must provide a Rune (non-Master)",
      ", 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.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.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:"
    ]
  },
  {
    "file": "YN8719gme9AxYtyY.js",
    "count": 5,
    "strings": [
      "Lore (Magic)",
      "Magic Item",
      "Add Chaos Steed and +20 Ride (Horse)?",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "g0SzfsLyW7aD2F19.js",
    "count": 5,
    "strings": [
      ")[0].trim()} (${group})`\n    }\n    else\n    {\n        let value = await ValueDialog.create({text :",
      ", title : this.effect.name});\n        if (value)\n        {\n            name = `${name.split(",
      ")[0].trim()} (${value})`\n            tests = this.item.system.tests.value.replace(",
      ", value);\n        }\n    }\n    this.item.updateSource({name,",
      "}\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 ="
    ]
  },
  {
    "file": "whUSkaR1yem21bXp.js",
    "count": 5,
    "strings": [
      "}`).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(",
      ").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(",
      ", {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(",
      ", {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 +"
    ]
  },
  {
    "file": "z8mwLihZQu0JtUHY.js",
    "count": 5,
    "strings": [
      "Lore (Magic)",
      "Dark Magic (Necromancy)",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(",
      ", items)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "Jjq3oPYbI26zjxME.js",
    "count": 4,
    "strings": [
      ")}!`)\n        for(let weapon of dropped)\n        {\n            await weapon.system.toggleEquip();\n        }\n    }\n}\n\nlet roll = await new Roll(",
      ").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `Dropped ${dropped.map(i => i.name).join(",
      ")}!`}));\n\nthis.effect.updateSource({",
      ")\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 :"
    ]
  },
  {
    "file": "groEX1wJ9l00PkDF.js",
    "count": 4,
    "strings": [
      ");\n}\n\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.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\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              await effect.delete();"
    ]
  },
  {
    "file": "hL3JUSY3xMA4zj2Q.js",
    "count": 4,
    "strings": [
      ", {\n  skipTargets: true, \n  appendTitle:  ` — ${this.effect.name}`, \n  fields: {\n    difficulty:",
      "},\n  context: {\n    success:",
      ",\n    failure:",
      ",\n  }\n});\n\nawait test.roll();\nif (test.failure) {\n  await this.actor.addCondition("
    ]
  },
  {
    "file": "lmBAZCtofsC8hHHG.js",
    "count": 4,
    "strings": [
      ">You have accrued ${signedSL} ${SL > 1 ?",
      "}. Do you want to roll d10?</p>\n    <p>1–6: add +1 SL</p>\n    <p>7–10: lose all accrued SLs and perform next Test at –1 SL</p>\n  </div>\n`;\n  const choice = await foundry.applications.api.DialogV2.confirm({\n    yes: {label:",
      "},\n    content,\n  });\n\n  if (!choice) break;\n\n  const roll = new Roll(",
      ");\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("
    ]
  },
  {
    "file": "lvjcddwRiN9iGruy.js",
    "count": 4,
    "strings": [
      ", { appendTitle: ` - ${this.effect.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 = `<a class=",
      "></i>@ROLL</a>`\n    let msg =\n        `<p><b>${this.actor.prototypeToken.name}</b> ages by ${inline.replace(",
      ", fields: { difficulty: \"challenging\" } })\nawait test.roll();\n\nif (test.failed) \n{\n    let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n    let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\n    let currentAge = parseInt(this.actor.system.details.age.value)\n\n    let inline ="
    ]
  },
  {
    "file": "oTXPA6rbPnYOKNmo.js",
    "count": 4,
    "strings": [
      "Two Handed Weapon",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(",
      ", items)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "x9iKFYYc4Ocy8PTS.js",
    "count": 4,
    "strings": [
      "<em>Grace is beyond style</em>",
      "Choose Group",
      ")[0] + ` (${name}`\n    })\n}\nelse \n{\n    item = await fromUuid(",
      ");\n    let data = item.toObject();\n    data.name += ` (${name})`\n    this.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "0Uly7OmkH0zqYbxQ.js",
    "count": 3,
    "strings": [
      ")}!`)\n        for(let weapon of dropped)\n        {\n            await weapon.system.toggleEquip();\n        }\n    }\n}\n\nlet roll = await new Roll(",
      ", this.actor).roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({",
      ")\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 :"
    ]
  },
  {
    "file": "4iu3CmOI19soOYuA.js",
    "count": 3,
    "strings": [
      "} ];\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,",
      ")\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("
    ]
  },
  {
    "file": "6BmvV9c03FkfisnE.js",
    "count": 3,
    "strings": [
      ")})\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    this.script.message(`<strong>${this.item.name}</strong> 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(",
      ",\n      {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n    await this.item.effects.contents[0].delete();\n    await this.item.update({name : this.item.name += \" (Utilisé)\"})\n    this.script.message("
    ]
  },
  {
    "file": "7JW9t8AYSDkkzG2V.js",
    "count": 3,
    "strings": [
      ")})\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    this.script.message(`<strong>${this.item.name}</strong> 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(",
      ",\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("
    ]
  },
  {
    "file": "7T3iXgrL72fea67C.js",
    "count": 3,
    "strings": [
      ",\n  fields: {difficulty: \"easy\"},\n  context: {\n    success:",
      ",\n    failure:",
      "}\n});\n\nawait test.roll();\n\nif (test.failed) {\n  await this.actor.addEffectItems(bloodyFluxUUID, this.effect);\n} else {\n  const SL = test.result.SL;\n  const heal = 1 + SL;\n  await this.actor.modifyWounds(heal);\n  this.script.message("
    ]
  },
  {
    "file": "8yBr6VbdKcrWUuqw.js",
    "count": 3,
    "strings": [
      "this.actor.characteristics.int.value=",
      "this.actor.characteristics.wp.value=",
      "this.actor.characteristics.fel.value ="
    ]
  },
  {
    "file": "BVNKF9omCppWPLys.js",
    "count": 3,
    "strings": [
      "You must control an Actor capable of performing a Strength Test",
      "},\n  context: {\n    success:",
      "}\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,"
    ]
  },
  {
    "file": "Bu0KUpGvfmFF7LJs.js",
    "count": 3,
    "strings": [
      ", {appendTitle : ` - ${this.effect.name}`, fields : {difficulty :",
      "}});\n\nawait test.roll();\n\nif (test.failed)\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("
    ]
  },
  {
    "file": "EC8cZmqrE095cDc2.js",
    "count": 3,
    "strings": [
      ",\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(",
      ");\n    loreTest.renderRollCard();\n    return;\n  } \n}\n\nlet test = await actor.setupSkill('Calme',  {\n  appendTitle:",
      ",\n  skipTargets: true,\n  fields: {difficulty: 'easy'},\n  characteristic: 'wp',\n});\nawait test.roll();\n\nif (!test.succeeded) {\n  test.result.other.push("
    ]
  },
  {
    "file": "ETfmit2Cx0Py77ai.js",
    "count": 3,
    "strings": [
      "} ];\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,",
      ")\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("
    ]
  },
  {
    "file": "KmngDrPD72xn22kZ.js",
    "count": 3,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - Used ${this.effect.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({",
      ", 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("
    ]
  },
  {
    "file": "MgMMoC4Umpg7fmNI.js",
    "count": 3,
    "strings": [
      ")}) \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    this.script.message(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n    {whisper: ChatMessage.getWhisperRecipients(",
      ",\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("
    ]
  },
  {
    "file": "N8hA6ysHCTlLd8Kj.js",
    "count": 3,
    "strings": [
      "Ritual Dress incorporating many ingredients and fetishes",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "R32U01LBjBrK1pns.js",
    "count": 3,
    "strings": [
      ", {hideDSN: true})).text;\n\n\n        let templateItem = await warhammer.utility.findItemId(templateMap[template._id]);\n\n        let bio = \n        `\n        <p><strong>Template</strong>: ${template.text}</p>\n        <p><strong>Phsyical Quirk</strong>: ${physicalQuirk}</p>\n        <p><strong>Work Ethic</strong>: ${workEthic}</p>\n        <p><strong>Personality Quirk</strong>: ${personalityQuirk}</p>\n        `\n        \n        this.script.message(bio, {whisper : ChatMessage.getWhisperRecipients(",
      ")})\n\n        await this.actor.update({",
      ": bio})\n\n        if (templateItem)\n        {\n            this.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "R8ecKGRzOr4ThvVa.js",
    "count": 3,
    "strings": [
      "Maintenance Crew Test",
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "RvipIYj9H7n4UDMe.js",
    "count": 3,
    "strings": [
      ": 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 ==",
      ")\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(",
      ", {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("
    ]
  },
  {
    "file": "TCtXPvDpbfz1yrVZ.js",
    "count": 3,
    "strings": [
      "Corps à corps (A deux mains)",
      "A deux mains",
      "<p>\n        Select your choice\n        </p>\n        <ol>\n        <li>Melee (Basic)</li>\n        <li>Melee (Two-Handed)</li>\n        </ol>"
    ]
  },
  {
    "file": "VINX6TBAJQznhVcN.js",
    "count": 3,
    "strings": [
      "Maintenance Crew Test",
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "a8i0sA1RBnD8nHZt.js",
    "count": 3,
    "strings": [
      "Choose Qualities to add",
      "Choose Flaws to remove",
      "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"
    ]
  },
  {
    "file": "aeBetniKqq5SD9Ou.js",
    "count": 3,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(",
      ", items)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "bEVlJOOA1kLlzpWx.js",
    "count": 3,
    "strings": [
      "Ritual Dress incorporating many ingredients and fetishes",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "fq2fqlWlrVfitkcB.js",
    "count": 3,
    "strings": [
      ", 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,",
      ")\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("
    ]
  },
  {
    "file": "iNAQJa5HyaEckknX.js",
    "count": 3,
    "strings": [
      ", {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 ==",
      ")\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(`Loses access to <strong>${chosen.name}</strong>`)\n        chosen.update({name : chosen.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("
    ]
  },
  {
    "file": "jdS2u1tQPYeO55WI.js",
    "count": 3,
    "strings": [
      "<p>Damage all Items carried?</p>",
      "}\n\t\tfor(let item of armour)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg +=",
      "}\n\t\tfor(let item of trappings)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg +="
    ]
  },
  {
    "file": "nkdKBJ8ItqWiRAWL.js",
    "count": 3,
    "strings": [
      ")}) \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    this.script.message(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n    {whisper: ChatMessage.getWhisperRecipients(",
      ",\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("
    ]
  },
  {
    "file": "rF0Z3hTUUnSxL3Mq.js",
    "count": 3,
    "strings": [
      "Armour (Hide)",
      "Choose Optional Traits",
      ")}`);\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "rly9iBUy8EX7NhQT.js",
    "count": 3,
    "strings": [
      "You must target exactly one Boat.",
      "You can only Constrict a Boat",
      "You can only Constrict vessels of Taille Large or smaller"
    ]
  },
  {
    "file": "svCqdytEOtqFXCcs.js",
    "count": 3,
    "strings": [
      "Add Chaos Steed and +20 Ride (Horse)?",
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "sz0PqS1kroMOzUZk.js",
    "count": 3,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(",
      ", items)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "wbM7tpw4TxvadcWm.js",
    "count": 3,
    "strings": [
      ";\nfor(let item of items)\n{\n    if (item.system.properties.qualities.durable)\n    {\n        await item.update({",
      ": []});\n        msg += `<p>${item.name} loses all Qualities</p>`\n    }\n    else \n    {\n        msg += `<p>${item.name} crumbles into dust!</p>` \n        await item.update({name : item.name +",
      "}\n    else \n    {\n        msg +="
    ]
  },
  {
    "file": "xgplXZMs459X7XXM.js",
    "count": 3,
    "strings": [
      ")}) \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    this.script.message(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n    {whisper: ChatMessage.getWhisperRecipients(",
      ",\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("
    ]
  },
  {
    "file": "xklncIMwQIespDxS.js",
    "count": 3,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields : {difficulty :",
      "}});\nawait test.roll();\nCorruptionMessageModel.createCorruptionMessage(",
      ", this.script.getChatData())\n\nif (test.failed)\n{\n    this.actor.addCondition("
    ]
  },
  {
    "file": "y3F1K1sYBymPZCjz.js",
    "count": 3,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nconsole.log(",
      ", items)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "ynoHNXXCGRS6fTqF.js",
    "count": 3,
    "strings": [
      ").roll()).total\n\nif (args.actor.characteristics.i.value <= 0)\n{\n   i_gain += (await new Roll(",
      ").roll()).total\n}\n\nmsg = `<b>${this.actor.prototypeToken.name}</b> gains ${i_gain} Initiative`\n\nlet newValue = i_gain + args.actor.characteristics.i.modifier\n\nthis.actor.update({",
      ")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effect.updateSource({"
    ]
  },
  {
    "file": "18MeEQ0As3JvER71.js",
    "count": 2,
    "strings": [
      "EFFECT.CreatureBackInWater",
      "EFFECT.CreatureOutOfWater"
    ]
  },
  {
    "file": "1BT0MWM2cbhlEnrn.js",
    "count": 2,
    "strings": [
      ": 5\n        }\n        let items = []\n\n        let updateObj = this.actor.toObject();\n\n        let talents = (await Promise.all([game.wfrp4e.tables.rollTable(",
      ")])).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("
    ]
  },
  {
    "file": "1CeYp5MlPcH68UIw.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "1ZArMNUI8qqH6zkX.js",
    "count": 2,
    "strings": [
      "+ this.effect.name, context : {failure:",
      "}})\nawait test.roll();\nif (test.failed)\n{\n    args.actor.addCondition("
    ]
  },
  {
    "file": "3ixqbsEMfSSTzAXU.js",
    "count": 2,
    "strings": [
      "Subi la @Condition[Fatigued] à cause de cauchemars.",
      "A souffert de cauchemars, mais a assez bien dormi."
    ]
  },
  {
    "file": "4MQ7u4INxp51oyyR.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "4ylzjgUdHY5D0yVh.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "5JWC0l3JEpOsqbR9.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "5JvKJZPcd6Hz5zvn.js",
    "count": 2,
    "strings": [
      "+ updateObj.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "5ScjIdRUOxblHdWS.js",
    "count": 2,
    "strings": [
      ";\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      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:"
    ]
  },
  {
    "file": "5dR7Erj3nwsxLAV7.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "6elUNF58TaiYjxcx.js",
    "count": 2,
    "strings": [
      "+ this.effect.name, context : {failure:",
      "}})\nawait test.roll();\nif (test.failed)\n{\n    this.actor.addCondition("
    ]
  },
  {
    "file": "8GyJgdHVBaLrHCY8.js",
    "count": 2,
    "strings": [
      ")\n{\n    this.item.updateSource({name : this.item.name += ` (${types[type]})`,",
      ": this.item.system.specification.value.replace("
    ]
  },
  {
    "file": "8xqYrBIf1Zhlwizg.js",
    "count": 2,
    "strings": [
      "<p>Finished raisint <em>the anchor</em>.</p>",
      ",\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:"
    ]
  },
  {
    "file": "9AMoFRATTAfdKlKN.js",
    "count": 2,
    "strings": [
      ",\n  fields: {difficulty: \"challenging\"},\n  context: {\n    failure:",
      "}\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("
    ]
  },
  {
    "file": "A0OK0qAMmnf8iNJf.js",
    "count": 2,
    "strings": [
      ")})\n    if (args.test.failed && this.actor.type ==",
      ")\n    {\n        this.actor.update({"
    ]
  },
  {
    "file": "AI7iVbQMPzXMP5on.js",
    "count": 2,
    "strings": [
      "(bonus)",
      "duration.seconds"
    ]
  },
  {
    "file": "AvRbjpBfTX3mn3bz.js",
    "count": 2,
    "strings": [
      "Set Liquid Fortification effect duration to 1 hour.",
      "Reset Liquid Fortification effect duration to 1 hour."
    ]
  },
  {
    "file": "BD7bVTU2pVoRSRBe.js",
    "count": 2,
    "strings": [
      "Coughs and Sneezes",
      "Choose Symptoms"
    ]
  },
  {
    "file": "BEEvU2hE5ymcNOH9.js",
    "count": 2,
    "strings": [
      "Fatigued added to",
      "which cannot be removed until the Malaise symptom is gone."
    ]
  },
  {
    "file": "BHbFqhJPzZI2txLs.js",
    "count": 2,
    "strings": [
      ")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type ==",
      "&& 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 !="
    ]
  },
  {
    "file": "EJObiSth3WdcJOXN.js",
    "count": 2,
    "strings": [
      "&& args.test.failed && args.test.result.SL <= -3)\n{\n    this.script.notification(",
      ");\n    this.actor.addCondition("
    ]
  },
  {
    "file": "EdTChmSouS0MSmk5.js",
    "count": 2,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n    this.script.message(",
      ")\n}\nelse \n{\n    this.script.message("
    ]
  },
  {
    "file": "EsZx8cY34quYG4MQ.js",
    "count": 2,
    "strings": [
      "This Actor does not know any runes.",
      "Anvil of Doom Bonus"
    ]
  },
  {
    "file": "FPYNcxm21678boLT.js",
    "count": 2,
    "strings": [
      ") return;\n\nconst SL = args.opposedTest.data.opposeResult.differenceSL;\n\nconst targetId = this.effect.getFlag(",
      ");\n  return await this.effect.delete();\n}\n\nif (SL > 0) {\n  args.opposedTest.data.opposeResult.other.push("
    ]
  },
  {
    "file": "FtZf56VI6Qsspu0D.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "GjkxWj9wCAclM9WA.js",
    "count": 2,
    "strings": [
      "All Effects have been used. Reset to select them again",
      "Choose Power to Gain"
    ]
  },
  {
    "file": "GsAyB5xnK3ASeoah.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "H85k4L3yICm7cfIk.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "JhbZWZhOJ23yOBmG.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "OsLXutfXyQCAkhAf.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "Pn5fekTbkwlr61XU.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "Q7eULXQ9AfDRmUGO.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "QRSACifDrvojIXHB.js",
    "count": 2,
    "strings": [
      "No Conditions on this Actor",
      "Choose a Condition"
    ]
  },
  {
    "file": "R6SnyF3y4Vsq6oga.js",
    "count": 2,
    "strings": [
      ")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type ==",
      "&& 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 !="
    ]
  },
  {
    "file": "R8FBHZaaARA3z9pB.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "RPqgRUkiLY5thVbC.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "SlrslcNdnYONcSH3.js",
    "count": 2,
    "strings": [
      "No weapons equipped!",
      "Not enough Fortune!"
    ]
  },
  {
    "file": "T4JEEDYCEIUbVHv4.js",
    "count": 2,
    "strings": [
      "Fatigued added to",
      "which cannot be removed until the Malaise symptom is gone."
    ]
  },
  {
    "file": "TGN070HeJLl3gSMY.js",
    "count": 2,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, context: { failure:",
      "}})\nawait test.roll();\nif (test.failed)\n{\n    this.actor.addCondition("
    ]
  },
  {
    "file": "TIoUbjOtj7PTK2t8.js",
    "count": 2,
    "strings": [
      ",\n  fields: {difficulty: \"challenging\"},\n  context: {\n    failure:",
      "}\n});\n\nawait test.roll();\n\nif (test.failed) {\n  const SL = Number(test.result.SL);\n  this.script.message("
    ]
  },
  {
    "file": "TpZItJ5Ugbazaobd.js",
    "count": 2,
    "strings": [
      ")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`,",
      ": locations})\nthis.effect.updateSource({"
    ]
  },
  {
    "file": "TwgdEucxcHloc4cX.js",
    "count": 2,
    "strings": [
      "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",
      "<p>\n    Select your choice\n    </p>\n    <ol>\n    <li>Mail</li>\n    <li>Mail & Leather</li>\n    <li>Plate</li>\n    </ol>"
    ]
  },
  {
    "file": "UDPsaymtZf39UsMk.js",
    "count": 2,
    "strings": [
      "Fatigued added to",
      "which cannot be removed until the Malaise symptom is gone."
    ]
  },
  {
    "file": "UlRSaZG4ZUU6fMND.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "UnqnWi0dZYLf5fTT.js",
    "count": 2,
    "strings": [
      "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",
      "<p>\n    Select your choice\n    </p>\n    <ol>\n    <li>Mail</li>\n    <li>Mail & Leather</li>\n    <li>Plate</li>\n    </ol>"
    ]
  },
  {
    "file": "V9wD9FWHWxZUOGSI.js",
    "count": 2,
    "strings": [
      ").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(",
      ")\n}\nelse \n{\n    fatigued = Math.max(0, fatigued)\n    if (fatigued)\n        this.actor.addCondition(\"fatigued\", fatigued)\n    this.script.notification("
    ]
  },
  {
    "file": "VbI0Al6rJfypV3qY.js",
    "count": 2,
    "strings": [
      "ROLL.ImpressiveFailure",
      "ROLL.AstoundingSuccess"
    ]
  },
  {
    "file": "VcE8Hie2jbpuyuM3.js",
    "count": 2,
    "strings": [
      "Spell Rules Reminder",
      "s name\nawait effect.update({\n  name,\n  \"system.scriptData\": scriptData\n});\n\n\n// update Trait"
    ]
  },
  {
    "file": "W2rdTwflbUVxFyfd.js",
    "count": 2,
    "strings": [
      "), {context : {failure : this.actor.name +",
      "})\n                            await test.roll();\n                            if (test.failed)\n                            {\n                                this.actor.addCondition("
    ]
  },
  {
    "file": "WOpRJluHKER1MdgI.js",
    "count": 2,
    "strings": [
      "), {context : {failure : this.actor.name +",
      "})\n                            await test.roll();\n                            if (test.failed)\n                            {\n                                this.actor.addCondition("
    ]
  },
  {
    "file": "WR0Kqn8CF5iwToak.js",
    "count": 2,
    "strings": [
      ";\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      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:"
    ]
  },
  {
    "file": "Wo4wQKUxSItAhRzZ.js",
    "count": 2,
    "strings": [
      ")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type ==",
      "&& 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 !="
    ]
  },
  {
    "file": "XcvDYNZgJ2rpAdDV.js",
    "count": 2,
    "strings": [
      "Fatigued added to",
      "which cannot be removed until the Malaise symptom is gone."
    ]
  },
  {
    "file": "Y8J66v8VTKUASGuK.js",
    "count": 2,
    "strings": [
      "No Conditions on this Actor",
      "Choose a Condition"
    ]
  },
  {
    "file": "YJX7WnxzXXIVdH6P.js",
    "count": 2,
    "strings": [
      "]\n    }\n]\n\nlet arcane = await ItemDialog.createFromFilters(filters, 12, {title : this.effect.name, text :",
      "})\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("
    ]
  },
  {
    "file": "ZCBcwbVFHFTFRntb.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "ZRoG7GiMDQWso6gN.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "a7pEvCycVnFBXGAQ.js",
    "count": 2,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields : {difficulty :",
      "}})\nawait test.roll();\n\nif (!test.succeeded)\n{\n\tthis.actor.addCondition("
    ]
  },
  {
    "file": "bwtQOSWn120NICkf.js",
    "count": 2,
    "strings": [
      "}});\nawait test.roll();\n\nif (test.failed)\n{\n   await this.actor.addCondition(",
      ")\n   await this.actor.addCondition("
    ]
  },
  {
    "file": "eRVVn8YtU8nnOW2q.js",
    "count": 2,
    "strings": [
      ",\n  fields: {difficulty: \"difficult\"},\n  context: {\n    failure:",
      ",\n    success:"
    ]
  },
  {
    "file": "f4vvAGQ8OGoEbrgy.js",
    "count": 2,
    "strings": [
      "+ this.effect.name, context : {failure:",
      "}})\nawait test.roll();\nif (test.failed)\n{\n    args.actor.addCondition("
    ]
  },
  {
    "file": "goz8yTlMozlsz3uY.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "jOCLEsjNzERyVLsP.js",
    "count": 2,
    "strings": [
      "ROLL.MajorMis",
      "ROLL.MinorMis"
    ]
  },
  {
    "file": "jsgLEVYvMieyYT6L.js",
    "count": 2,
    "strings": [
      "; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n    if (this.effect.getFlag(",
      "No Token Image path configured. The image path should be set in the first line of this script."
    ]
  },
  {
    "file": "jvNuIbOtB46p0esq.js",
    "count": 2,
    "strings": [
      ";\n\t\t\targs.test.result.description =",
      "}\n\t\targs.test.result.outcome ="
    ]
  },
  {
    "file": "k465TgRelwcSUdS2.js",
    "count": 2,
    "strings": [
      "Failed Trade (Engineering)",
      "This Actor does not have Trade (Engineering)!"
    ]
  },
  {
    "file": "kbXDGAmWWD4CZJHB.js",
    "count": 2,
    "strings": [
      ");\nawait roll.evaluate();\nawait roll.toMessage({flavor:",
      "});\nthis.actor.system.status.mood.addEntry("
    ]
  },
  {
    "file": "nkSmu7v9WiAaK4vq.js",
    "count": 2,
    "strings": [
      ";\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      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:"
    ]
  },
  {
    "file": "oWa7RkScnl6lR5vd.js",
    "count": 2,
    "strings": [
      ") \n{\n    if (args.test.failed)\n    {\n        let item = await fromUuid(",
      ")\n        let data = item.toObject();\n        this.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "okW06V9UiPC4Vcrn.js",
    "count": 2,
    "strings": [
      "+ this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(",
      ", {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("
    ]
  },
  {
    "file": "q8lOAWr2970sZeTw.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "qDYJnO2JosPJrjpz.js",
    "count": 2,
    "strings": [
      "Bite of the Purple Skullback",
      ",\n  fields: {difficulty: \"average\"},\n  context: {\n    failure:"
    ]
  },
  {
    "file": "rBAoyhzeU3Q8MVSk.js",
    "count": 2,
    "strings": [
      ";\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      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:"
    ]
  },
  {
    "file": "re1UFtxvRRjpPB7Z.js",
    "count": 2,
    "strings": [
      "}\nelse if (data.system.location.key[0] ==",
      "}\n\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "tNTO1LVN7JqHf4YN.js",
    "count": 2,
    "strings": [
      ") \n{\n    if (args.test.failed)\n    {\n        this.actor.createEmbeddedDocuments(",
      "]])\n        this.script.message(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients("
    ]
  },
  {
    "file": "tyQLkRLk1AXB4g2u.js",
    "count": 2,
    "strings": [
      "critical-roll",
      "}\n  \n  args.test.result.other.push ("
    ]
  },
  {
    "file": "uLBDnWC3S0lRitbj.js",
    "count": 2,
    "strings": [
      "Gained a Corruption point",
      ")})\n    }\n    else \n    {\n        await this.actor.addCondition("
    ]
  },
  {
    "file": "uhCq5NwjQ2a2idPn.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "v4CCxVaVGf9i8U7X.js",
    "count": 2,
    "strings": [
      ").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet test = new Roll(`${rolls.join(",
      ")\n\nlet test = new Roll("
    ]
  },
  {
    "file": "vJQRBxDfPwHens0a.js",
    "count": 2,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields: { difficulty:",
      "} }).then(async test => {\n        await test.roll();\n        if (test.failed) \n        {\n           await args.actor.addCondition("
    ]
  },
  {
    "file": "vS2D9QUslR7ZtXXm.js",
    "count": 2,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields : {difficulty :",
      "}})\nawait test.roll();\nif (test.failed)\n{\n    let roll = await new Roll("
    ]
  },
  {
    "file": "w4RuGIfseGoxXA3k.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "wBc8XvkAnv3j93vR.js",
    "count": 2,
    "strings": [
      "Reduced Fate and Fortune by 1",
      "Reduced Resilience and Resolve by 1"
    ]
  },
  {
    "file": "yQziCK8G8I1RYkTj.js",
    "count": 2,
    "strings": [
      "Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front",
      "+1 AP against missile attacks to the front"
    ]
  },
  {
    "file": "ynV7tz0OdCwlsQp6.js",
    "count": 2,
    "strings": [
      "msg += `<p>${await this.actor.applyBasicDamage(8, {loc :",
      ", suppressMsg: true, hideDSN: true})}</p>`\nmsg += `<p>${await this.actor.applyBasicDamage(8, {loc :"
    ]
  },
  {
    "file": "yvtF2t9aibxibAIM.js",
    "count": 2,
    "strings": [
      ",\n  fields: {difficulty: \"challenging\"},\n  context: {\n    failure:",
      ",\n    success:"
    ]
  },
  {
    "file": "zL7ECmBBMAqf5Esn.js",
    "count": 2,
    "strings": [
      "<p>Does the vessel have a magazine or any other kind of store for blackpowder?</p>",
      ");\nthis.script.message("
    ]
  },
  {
    "file": "zXh8rgMxWoCLTxVd.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "zdGAvfL7zJ7wpYxG.js",
    "count": 2,
    "strings": [
      ";\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:",
      ",\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:"
    ]
  },
  {
    "file": "1jQq9v8fXK8zuEBU.js",
    "count": 1,
    "strings": [
      "this.script.message(msg)\n\nlet test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle :"
    ]
  },
  {
    "file": "1wrPvP6lJwIAfmsl.js",
    "count": 1,
    "strings": [
      "Choose Location"
    ]
  },
  {
    "file": "2EAYX5G9Fh3HJwiP.js",
    "count": 1,
    "strings": [
      "Condition Brisé supprimée."
    ]
  },
  {
    "file": "2yW0kuwLfgRzJR2S.js",
    "count": 1,
    "strings": [
      "duration.seconds"
    ]
  },
  {
    "file": "3CeKfDcMEVgQlcXm.js",
    "count": 1,
    "strings": [
      "Hatred (All enemies)"
    ]
  },
  {
    "file": "3D5ImpMgpOTPucvv.js",
    "count": 1,
    "strings": [
      ").pop())\n\nif (ones > SL)\n   args.test.result.other.push(`<span class="
    ]
  },
  {
    "file": "3IGO7xEjRjat937X.js",
    "count": 1,
    "strings": [
      "Etat Fatigué - Suppression de la condition Fatigué, effet désactivé"
    ]
  },
  {
    "file": "3KH6OE7L7uJESI2Z.js",
    "count": 1,
    "strings": [
      "<b>Wyrmslayer</b>: Ignore le BE contre les Dragons"
    ]
  },
  {
    "file": "4rTmV3TNxctUe0ly.js",
    "count": 1,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n   this.actor.addCondition("
    ]
  },
  {
    "file": "58rFc9HiBoX66J6p.js",
    "count": 1,
    "strings": [
      ";\n\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\n\nthis.script.message(message.replace("
    ]
  },
  {
    "file": "5GP9UJMvBZv6kWtI.js",
    "count": 1,
    "strings": [
      "}\nfor(let item of armour)\n{\n\tawait item.system.damageItem(1);\n\tmsg +="
    ]
  },
  {
    "file": "5M6IgCUncCwyxHok.js",
    "count": 1,
    "strings": [
      ";\n    item = await fromUuid(uuid);\n    if (item)\n    {\n        msg +="
    ]
  },
  {
    "file": "64aJznxPMUHAuf7F.js",
    "count": 1,
    "strings": [
      ")\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("
    ]
  },
  {
    "file": "65xE9OV5sA1ZWT7j.js",
    "count": 1,
    "strings": [
      ").pop())\n\nif (ones > SL)\n   args.test.result.other.push(`<span class="
    ]
  },
  {
    "file": "6Ws3ieQ7pG5poUyT.js",
    "count": 1,
    "strings": [
      ", Object.values(game.wfrp4e.config.magicLores));\n    if (value)\n    {\n     this.item.updateSource({"
    ]
  },
  {
    "file": "7F6aGxZJjwxm5e5P.js",
    "count": 1,
    "strings": [
      ")\n            this.actor.modifyWounds(-1 * value)\n            await this.item.system.toggleEquip();\n            args.test.addSL(value);\n            args.test.preData.other.push("
    ]
  },
  {
    "file": "7WR2hJjHPhHhHxAq.js",
    "count": 1,
    "strings": [
      ")\n   poisoned.delete();\n}\nelse\n  this.script.notification("
    ]
  },
  {
    "file": "7w7QA7GBhzZ98OS0.js",
    "count": 1,
    "strings": [
      "manann-mood-made-meaningless"
    ]
  },
  {
    "file": "8K9tpCwvFC9INk5V.js",
    "count": 1,
    "strings": [
      "].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}\nelse if (["
    ]
  },
  {
    "file": "8zTkDVziBPaNbMQX.js",
    "count": 1,
    "strings": [
      "})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "96Y1yIH1lRjTs5hL.js",
    "count": 1,
    "strings": [
      ")\n{\n    this.actor.addCondition("
    ]
  },
  {
    "file": "9A7rYY3FKi5XLihG.js",
    "count": 1,
    "strings": [
      "<p>This Talent also extends to any metal object because of <strong>Metallic Affinity</strong></p>"
    ]
  },
  {
    "file": "9VfeubiCV83LN9iY.js",
    "count": 1,
    "strings": [
      "(When Charging)"
    ]
  },
  {
    "file": "9WZa63lr0K3SsP4G.js",
    "count": 1,
    "strings": [
      "Applied after effects"
    ]
  },
  {
    "file": "A6DcKPzAGntzSCil.js",
    "count": 1,
    "strings": [
      ")}!`}));\n\nthis.effect.updateSource({"
    ]
  },
  {
    "file": "ACtDCTLZXmd5uXjX.js",
    "count": 1,
    "strings": [
      "Halve Damage? (Halves all damage other than fire, cold, and magic)"
    ]
  },
  {
    "file": "AYEiCx2Es3QtMY28.js",
    "count": 1,
    "strings": [
      ", { 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:"
    ]
  },
  {
    "file": "CHnaBPHk6HdFS512.js",
    "count": 1,
    "strings": [
      "Choose Limb"
    ]
  },
  {
    "file": "CIxZYkHggBQ6EsHP.js",
    "count": 1,
    "strings": [
      "Effect Used"
    ]
  },
  {
    "file": "CS6O7UUjQcUJoOUP.js",
    "count": 1,
    "strings": [
      "must make a <b>Willpower</b> Test or fall @Condition[Prone]."
    ]
  },
  {
    "file": "CbfUDhUr5R4UnPPq.js",
    "count": 1,
    "strings": [
      "Cannot remove Blinded condition."
    ]
  },
  {
    "file": "ClkT2WG2UjVwQ97T.js",
    "count": 1,
    "strings": [
      "Received 1 Blinded Condition"
    ]
  },
  {
    "file": "DWBxvzfWGcG7PVNP.js",
    "count": 1,
    "strings": [
      ";\n\nthis.item.updateSource({"
    ]
  },
  {
    "file": "Dew3Ks9yC4DynSMi.js",
    "count": 1,
    "strings": [
      "|| args.weapon?.system?.attackType ==="
    ]
  },
  {
    "file": "Dk4VF4UXSMK5SaVP.js",
    "count": 1,
    "strings": [
      "Activated to negate Fumble / Ratée"
    ]
  },
  {
    "file": "E1vUepgop09FF5wy.js",
    "count": 1,
    "strings": [
      ")\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 = \"Close Combat opponents\"\n    this.script.notification("
    ]
  },
  {
    "file": "E3om295BMQojnM2F.js",
    "count": 1,
    "strings": [
      "Removed Fatigued"
    ]
  },
  {
    "file": "EJaBfqADqlo92Fx6.js",
    "count": 1,
    "strings": [
      "(To Be Determined)"
    ]
  },
  {
    "file": "FKEH7DeqU0FH4dkk.js",
    "count": 1,
    "strings": [
      "})\nawait test.roll();\n\nif (test.failed) {\n  \tthis.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));\n        this.script.scriptMessage("
    ]
  },
  {
    "file": "FPQp6XfbUH1BMafj.js",
    "count": 1,
    "strings": [
      "Cannot move or act this Turn"
    ]
  },
  {
    "file": "FZFOC7bip0oiWEzk.js",
    "count": 1,
    "strings": [
      "Added Bleeding"
    ]
  },
  {
    "file": "FiD3mvWIBHNNIuO9.js",
    "count": 1,
    "strings": [
      "Hit location changed to Head"
    ]
  },
  {
    "file": "FqevMs0ukQ9WuUHl.js",
    "count": 1,
    "strings": [
      "})\n    this.item.update({name :"
    ]
  },
  {
    "file": "GFaTz8f6PBNWrlad.js",
    "count": 1,
    "strings": [
      ", context : {failure :"
    ]
  },
  {
    "file": "GzSFlqL1YrIK1dxh.js",
    "count": 1,
    "strings": [
      "Select Wind"
    ]
  },
  {
    "file": "GzsuEg7gZy1f0ljy.js",
    "count": 1,
    "strings": [
      ")\n   bleeding.delete();  \n}\nelse \n{\n   this.script.notification("
    ]
  },
  {
    "file": "HG2fKOfruT5QV3A4.js",
    "count": 1,
    "strings": [
      "})\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("
    ]
  },
  {
    "file": "HJ2X4ZtXei0BXbxf.js",
    "count": 1,
    "strings": [
      "Choose a Skill"
    ]
  },
  {
    "file": "HmImVzvw6ecBy99l.js",
    "count": 1,
    "strings": [
      "Added Bleeding"
    ]
  },
  {
    "file": "HoNTnPphrJISSQr1.js",
    "count": 1,
    "strings": [
      "<em>Speak and be known to me</em>"
    ]
  },
  {
    "file": "IAGla7HJlYN0wa4H.js",
    "count": 1,
    "strings": [
      ") \n{\n    if (args.test.failed)\n    {\n        this.actor.addSystemEffect("
    ]
  },
  {
    "file": "IN4ZFOPooqJtNuIQ.js",
    "count": 1,
    "strings": [
      "&& args.weapon?.system?.attackType !=="
    ]
  },
  {
    "file": "J1FPDdrXGctKDTZz.js",
    "count": 1,
    "strings": [
      ")\n    mrData = mr.toObject()\n    mrData.system.specification.value = 2\n    \n    this.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "JXBUE0XuJOJNG7zE.js",
    "count": 1,
    "strings": [
      ",\n}\n\nlet test = await args.actor.setupSkill("
    ]
  },
  {
    "file": "JmZQRvdWjm9ykYfn.js",
    "count": 1,
    "strings": [
      "Cannot be Surprised"
    ]
  },
  {
    "file": "KVpDUEjHhd3nLa0f.js",
    "count": 1,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n    this.script.message(await game.wfrp4e.tables.formatChatRoll("
    ]
  },
  {
    "file": "LOL2TGf8p8KxP14D.js",
    "count": 1,
    "strings": [
      ")[2]\nreturn args.type !="
    ]
  },
  {
    "file": "LXEUhHuXe8keEPI9.js",
    "count": 1,
    "strings": [
      "}, 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("
    ]
  },
  {
    "file": "MKxYbHOrv0UuA7JB.js",
    "count": 1,
    "strings": [
      "- Wounded"
    ]
  },
  {
    "file": "MOZn375tGD2060cC.js",
    "count": 1,
    "strings": [
      "armet-damage"
    ]
  },
  {
    "file": "MPK7U4HLmIAsjdqs.js",
    "count": 1,
    "strings": [
      "</strong>: Ignore 2 APs"
    ]
  },
  {
    "file": "Me1wS5XdqUEy7OGt.js",
    "count": 1,
    "strings": [
      ";\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\n\nthis.script.message("
    ]
  },
  {
    "file": "MfxWXZwaZUjGSBqw.js",
    "count": 1,
    "strings": [
      "Immune to Ablaze"
    ]
  },
  {
    "file": "Mir4FMHQRdVqazAF.js",
    "count": 1,
    "strings": [
      ";\n   await args.actor.addCondition(\"entangled\");\n   if (actorTaille <= 2)\n   {\n       msg +="
    ]
  },
  {
    "file": "MnqQkXVp20Lw84I1.js",
    "count": 1,
    "strings": [
      ", {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields : {difficulty :"
    ]
  },
  {
    "file": "Msygc7oQQPB5fw0b.js",
    "count": 1,
    "strings": [
      ")\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("
    ]
  },
  {
    "file": "N2MeOlf0GjPiRcSb.js",
    "count": 1,
    "strings": [
      "Drops the item"
    ]
  },
  {
    "file": "NTFpkiGyBpOtrV0s.js",
    "count": 1,
    "strings": [
      "})\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("
    ]
  },
  {
    "file": "O45vpR4jDbQQnmvJ.js",
    "count": 1,
    "strings": [
      "(Target)"
    ]
  },
  {
    "file": "OEy2lxvic37dRBEt.js",
    "count": 1,
    "strings": [
      "})\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "OicQSEVZBbqLtrcf.js",
    "count": 1,
    "strings": [
      "Choose the Critical Wounds to heal (cannot reattach body parts)"
    ]
  },
  {
    "file": "PGHvFHBIygB5pnWT.js",
    "count": 1,
    "strings": [
      "</strong>: Adds @Condition[Ablaze] Condition"
    ]
  },
  {
    "file": "PeZYj8b0vedyJj00.js",
    "count": 1,
    "strings": [
      "Choose Lore"
    ]
  },
  {
    "file": "PmELrzD3RmF9qKkO.js",
    "count": 1,
    "strings": [
      "Choose Taille"
    ]
  },
  {
    "file": "Q68WiUWY7GxiXBbT.js",
    "count": 1,
    "strings": [
      "When Alone"
    ]
  },
  {
    "file": "QBBrzcSAe8QqE4WP.js",
    "count": 1,
    "strings": [
      ",\n  fields: {difficulty: \"challenging\"},\n  context: {\n    failure:"
    ]
  },
  {
    "file": "QLUaOkwuSPvBp7jU.js",
    "count": 1,
    "strings": [
      "Cannot attack targets that are not Entangled"
    ]
  },
  {
    "file": "QNxmImpLTou6WdMQ.js",
    "count": 1,
    "strings": [
      "Can make a <b>Difficult (-10) Willpower</b> Test to prevent the Miscast"
    ]
  },
  {
    "file": "Qgn92fZyc3Psn8QJ.js",
    "count": 1,
    "strings": [
      ").pop())\n\n   if (ones == 0) {\n      ones = 10;\n   }\n\n   if (ones > SL) {\n      args.test.data.result.SL ="
    ]
  },
  {
    "file": "RKIFGN583PQnqHGk.js",
    "count": 1,
    "strings": [
      "Gained 2 Bleeding Conditions"
    ]
  },
  {
    "file": "RSsGiDFibuqg3sHr.js",
    "count": 1,
    "strings": [
      "Choose a Disease"
    ]
  },
  {
    "file": "RwMw848y13Jq2L4f.js",
    "count": 1,
    "strings": [
      "});\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg ="
    ]
  },
  {
    "file": "S3Dev4hleOYqDNe9.js",
    "count": 1,
    "strings": [
      ")\n   }\n   else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n   {\n      args.test.result.other.push("
    ]
  },
  {
    "file": "SGr50Hq1AHIEzIFN.js",
    "count": 1,
    "strings": [
      "Choose Characteristic"
    ]
  },
  {
    "file": "SKn61f2ykhzuwMdw.js",
    "count": 1,
    "strings": [
      "fumble-roll"
    ]
  },
  {
    "file": "SLy1Fs3oXcHgFgjK.js",
    "count": 1,
    "strings": [
      "result.overcast.usage.other.current"
    ]
  },
  {
    "file": "SThruXFhxUdNKCG4.js",
    "count": 1,
    "strings": [
      "});\nawait test.roll();\n\nif (test.failed) {\n   this.actor.addCondition('stunned');\n}\n\nthis.script.scriptNotification("
    ]
  },
  {
    "file": "T0KBl8iEkcPq08RI.js",
    "count": 1,
    "strings": [
      "</strong>: Ignore Magical AP ("
    ]
  },
  {
    "file": "TpgK2aAe93ui3Rbs.js",
    "count": 1,
    "strings": [
      "fumble-roll"
    ]
  },
  {
    "file": "U26XMie3Kjoddisj.js",
    "count": 1,
    "strings": [
      "Cleared 1 Stunned Condition"
    ]
  },
  {
    "file": "UsuwsmU1TUQLQVM2.js",
    "count": 1,
    "strings": [
      ")[0].toLowerCase();\nreturn !args.spell || (args.type =="
    ]
  },
  {
    "file": "UxVfVoH7cbC9ESDr.js",
    "count": 1,
    "strings": [
      ",\n  fields: {difficulty: \"challenging\"},\n  context: {\n    failure:"
    ]
  },
  {
    "file": "V9xm4X1x3lPYTQaI.js",
    "count": 1,
    "strings": [
      "Immune to Peur"
    ]
  },
  {
    "file": "W9nyUNQStMr1pUHJ.js",
    "count": 1,
    "strings": [
      "Added Bleeding"
    ]
  },
  {
    "file": "WO5n7Vbx8AgoVrwC.js",
    "count": 1,
    "strings": [
      ", {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("
    ]
  },
  {
    "file": "WRe1eGmGVGejPcS8.js",
    "count": 1,
    "strings": [
      ")[2]\nreturn args.type =="
    ]
  },
  {
    "file": "WaeL2I8VVJmBBKHk.js",
    "count": 1,
    "strings": [
      "args.actor.addCondition(\"stunned\");\nargs.actor.corruptionDialog(\"moderate\");"
    ]
  },
  {
    "file": "Y7McxsHFeGhwQx0J.js",
    "count": 1,
    "strings": [
      "damage.value"
    ]
  },
  {
    "file": "YQ2LnLxp0xgy3meI.js",
    "count": 1,
    "strings": [
      "Gain additional +1 Corruption from"
    ]
  },
  {
    "file": "YRUTliBzAQvncGNX.js",
    "count": 1,
    "strings": [
      "Added Fatigued"
    ]
  },
  {
    "file": "YsUdMhQ2AArcJIqy.js",
    "count": 1,
    "strings": [
      ", { 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:"
    ]
  },
  {
    "file": "YySjPfSAPdMAfjsh.js",
    "count": 1,
    "strings": [
      "Resistance (Magic)"
    ]
  },
  {
    "file": "Z1zriXibT0mAmdhb.js",
    "count": 1,
    "strings": [
      "this.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "Z52yZDm6lP6fOP3O.js",
    "count": 1,
    "strings": [
      "Immune to Ablaze"
    ]
  },
  {
    "file": "ZCrfdLPOxiNDCDSg.js",
    "count": 1,
    "strings": [
      "t use this.effect because it thinks it"
    ]
  },
  {
    "file": "ZCuOjLAeENKN1Q4L.js",
    "count": 1,
    "strings": [
      "Halve Damage? (Halves Damage from all fire)"
    ]
  },
  {
    "file": "b2Kb4IuD22RhKhR0.js",
    "count": 1,
    "strings": [
      "No target!"
    ]
  },
  {
    "file": "bLkt8VpTTPoTxW0W.js",
    "count": 1,
    "strings": [
      "Added Bleeding"
    ]
  },
  {
    "file": "bRtZH0xRh8dgqMeW.js",
    "count": 1,
    "strings": [
      ");\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "bT4gLrE3W36DIP4k.js",
    "count": 1,
    "strings": [
      "</strong>: Ignore +1 Metal Armour"
    ]
  },
  {
    "file": "bgLeMqihLya2iobP.js",
    "count": 1,
    "strings": [
      "Can only be applied to River Troll."
    ]
  },
  {
    "file": "cK1Jysfu5IMUUH0C.js",
    "count": 1,
    "strings": [
      "<strong>Ward</strong> improved to"
    ]
  },
  {
    "file": "dWr3tkFoIzsAgelu.js",
    "count": 1,
    "strings": [
      "Injury reduces to"
    ]
  },
  {
    "file": "dZ4c5pKDqQV02aIK.js",
    "count": 1,
    "strings": [
      "+ parseInt(this.effect.sourceTest.result.SL)"
    ]
  },
  {
    "file": "ed7Sud9HM3uB2j6b.js",
    "count": 1,
    "strings": [
      "<em>Yield or die!</em>"
    ]
  },
  {
    "file": "eh1J3s0s4A2AxoFp.js",
    "count": 1,
    "strings": [
      "(Enemy)"
    ]
  },
  {
    "file": "ekjJQHyMbZT2vqdc.js",
    "count": 1,
    "strings": [
      ")\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effect.update({\"system.transferData.type\" : \"other\"})\n\tthis.script.notification("
    ]
  },
  {
    "file": "eqxE7nBO13yJS7hc.js",
    "count": 1,
    "strings": [
      "Wounds Healed"
    ]
  },
  {
    "file": "ezGqDoC9hNRBnFTB.js",
    "count": 1,
    "strings": [
      "Choose a Weapon"
    ]
  },
  {
    "file": "f29Pv6TQtgILxt1h.js",
    "count": 1,
    "strings": [
      ")\n   }\n   else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n      args.test.result.other.push("
    ]
  },
  {
    "file": "fEFfHFeJxkR0aIJK.js",
    "count": 1,
    "strings": [
      "Everyone within 20 feet loses 1 Wound and makes a <strong>Difficult (-10) Résistance</strong> or gains @Condition[Deafened]"
    ]
  },
  {
    "file": "g4t56A09yrpZaJQ2.js",
    "count": 1,
    "strings": [
      "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"
    ]
  },
  {
    "file": "gMIenSmLklAkB2Zm.js",
    "count": 1,
    "strings": [
      ", Object.values(game.wfrp4e.config.difficultyNames));\n    if (value)\n    {\n     this.item.updateSource({"
    ]
  },
  {
    "file": "gPQrszvIgGlW9yM4.js",
    "count": 1,
    "strings": [
      ")\n   args.test.preData.reversal = {allowed: true, if:"
    ]
  },
  {
    "file": "ga6bQzPuoIiQQrKg.js",
    "count": 1,
    "strings": [
      ",  {skipTargets: true, appendTitle :  ` - ${this.effect.name}`, fields : {difficulty :"
    ]
  },
  {
    "file": "hA8PzeiCsHqqlUZm.js",
    "count": 1,
    "strings": [
      "Gains @Condition[Nausea] for [[1d10]] hours"
    ]
  },
  {
    "file": "hSImyYjL0CENTvXf.js",
    "count": 1,
    "strings": [
      "}});\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"blinded\");\n}\n\nlet msg ="
    ]
  },
  {
    "file": "hYNWp75ggWSTht55.js",
    "count": 1,
    "strings": [
      "Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location"
    ]
  },
  {
    "file": "hhv7PrRdlf9sfC82.js",
    "count": 1,
    "strings": [
      ", {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("
    ]
  },
  {
    "file": "hpwJRAhCsXTp9bd9.js",
    "count": 1,
    "strings": [
      "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        `<p>\n        Sélectionnez votre choix\n        </p>\n        <ol>\n        <li>Mêlée (Base)</li>\n        <li>Mêlée (Arme d"
    ]
  },
  {
    "file": "hqMwzPozAVTzoCxa.js",
    "count": 1,
    "strings": [
      "fumble-roll"
    ]
  },
  {
    "file": "iH9o7t8vGDn6pm1d.js",
    "count": 1,
    "strings": [
      "fumble-roll"
    ]
  },
  {
    "file": "iO2hCDwyQ7v4qrOI.js",
    "count": 1,
    "strings": [
      ")\n   }\n   else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\n      args.test.result.other.push("
    ]
  },
  {
    "file": "id9ZdkERMZnZTWXt.js",
    "count": 1,
    "strings": [
      "Immune to Peur"
    ]
  },
  {
    "file": "imKVsCy8rya2gkwO.js",
    "count": 1,
    "strings": [
      "duration.rounds"
    ]
  },
  {
    "file": "inPxRSx0CDj1nwAm.js",
    "count": 1,
    "strings": [
      "Arcane Magic (Fire)"
    ]
  },
  {
    "file": "jW87rmQLtROdVEhW.js",
    "count": 1,
    "strings": [
      "<b>Rune of Goblin Bane</b>: Impact Added"
    ]
  },
  {
    "file": "kiJ6AiaYVUjt6aV6.js",
    "count": 1,
    "strings": [
      "Teeth Lost"
    ]
  },
  {
    "file": "kvaN100w0nBUlLbj.js",
    "count": 1,
    "strings": [
      "Immune to Poisoned"
    ]
  },
  {
    "file": "laptAldsT0Fm1rDt.js",
    "count": 1,
    "strings": [
      "<p>Apply blunt damage reduction? (-3)</p>"
    ]
  },
  {
    "file": "mPxmCsXYirAIT913.js",
    "count": 1,
    "strings": [
      "Choose Characteristic"
    ]
  },
  {
    "file": "mRvLsSVxNyt8LVZb.js",
    "count": 1,
    "strings": [
      "(To Be Determined)"
    ]
  },
  {
    "file": "mlulnXQo8XU8vKLD.js",
    "count": 1,
    "strings": [
      "Enter Grim value"
    ]
  },
  {
    "file": "mnvczEiu7gUSWvuV.js",
    "count": 1,
    "strings": [
      "critical-roll"
    ]
  },
  {
    "file": "naF5EWr1CBkYRZTK.js",
    "count": 1,
    "strings": [
      "})\n\n    if (choice)\n    {\n        args.abort ="
    ]
  },
  {
    "file": "ngMm7SgtVqVovFJG.js",
    "count": 1,
    "strings": [
      "action-link critical"
    ]
  },
  {
    "file": "nqWu0ZplxzRiUEAg.js",
    "count": 1,
    "strings": [
      ", {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 =="
    ]
  },
  {
    "file": "pR4Q2OnPxXtwRVli.js",
    "count": 1,
    "strings": [
      "Cannot suffer Critical Wounds"
    ]
  },
  {
    "file": "pkKpxVqRHIzywerL.js",
    "count": 1,
    "strings": [
      "Resisted Ablaze"
    ]
  },
  {
    "file": "pqQkeUVpuZ0jOKnZ.js",
    "count": 1,
    "strings": [
      "Rolled and applied mutations"
    ]
  },
  {
    "file": "q0LvphC8RDSyR0oY.js",
    "count": 1,
    "strings": [
      "Choose Characteristic"
    ]
  },
  {
    "file": "qAEZgtu5CrfUkxhx.js",
    "count": 1,
    "strings": [
      ")\n }\n   else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n   {\n      args.test.result.other.push("
    ]
  },
  {
    "file": "qu194dVXm9Vx1TGk.js",
    "count": 1,
    "strings": [
      ").pop())\n\n   if (ones > SL) {\n      args.test.data.result.SL ="
    ]
  },
  {
    "file": "rCh3ltUrUMovd2Kc.js",
    "count": 1,
    "strings": [
      "Cannot be surprised"
    ]
  },
  {
    "file": "rX8FTinyTMj9WJri.js",
    "count": 1,
    "strings": [
      ")[0]});\n  this.actor.addCondition("
    ]
  },
  {
    "file": "ramav4ymrDDkPKK4.js",
    "count": 1,
    "strings": [
      "Removed 1 Bleeding Condition"
    ]
  },
  {
    "file": "rpxQU26BU7nwjtqY.js",
    "count": 1,
    "strings": [
      "}, 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("
    ]
  },
  {
    "file": "s6eZXfZkC1My6EXl.js",
    "count": 1,
    "strings": [
      ")[2].toLowerCase();\nif (args.item.type =="
    ]
  },
  {
    "file": "s8idWt9YdMTRfnjV.js",
    "count": 1,
    "strings": [
      ");\nthis.actor.createEmbeddedDocuments("
    ]
  },
  {
    "file": "sB4KB9bT3nQhAoqG.js",
    "count": 1,
    "strings": [
      "Choose Lore"
    ]
  },
  {
    "file": "sNSfDBIA2k17hPYI.js",
    "count": 1,
    "strings": [
      "Ignore Ablaze"
    ]
  },
  {
    "file": "sPvfYQEnyAYNpIhF.js",
    "count": 1,
    "strings": [
      "Are you humanoid creature who have not made a sacrifice to Rhya (or another diety of nature or powerful nature spirit to whom the cult of Rhya are well disposed, such as Isha or Taal) since the last spring equinox?"
    ]
  },
  {
    "file": "sbK1a7txpSoXFzyB.js",
    "count": 1,
    "strings": [
      ").pop())\n\n   if (ones == 0) {\n      ones = 10;\n   }\n\n\n   if (ones > SL) {\n      args.test.data.result.SL ="
    ]
  },
  {
    "file": "sjnoYbWpAugyDilW.js",
    "count": 1,
    "strings": [
      "Animal becomes docile towards Humans, Elves who honour Isha, and similar allies."
    ]
  },
  {
    "file": "tGVEV6TLl310mFLP.js",
    "count": 1,
    "strings": [
      "</strong>: Ignore Non-Magical AP ("
    ]
  },
  {
    "file": "tUwP7TjrOOOnaCYJ.js",
    "count": 1,
    "strings": [
      ")\n   fatigued.delete();  \n}\nelse \n{\n\tthis.script.notification("
    ]
  },
  {
    "file": "toSrgcvWq9b5eN0K.js",
    "count": 1,
    "strings": [
      "})\nthis.script.message("
    ]
  },
  {
    "file": "u46KnlxCjP42F6QY.js",
    "count": 1,
    "strings": [
      "Personality table not found"
    ]
  },
  {
    "file": "ugL5IBB6R2yWyMWd.js",
    "count": 1,
    "strings": [
      "})\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 +="
    ]
  },
  {
    "file": "ulXfbycWUu36vdmS.js",
    "count": 1,
    "strings": [
      ", fields : {difficulty : \"difficult\", slBonus : -1 * this.effect.sourceTest.result.SL}})\nawait test.roll();\nif (test.succeeded)\n{\n\tthis.script.notification("
    ]
  },
  {
    "file": "v5xrDWcrTNFJkyQB.js",
    "count": 1,
    "strings": [
      "Add Option?\n    <p>\n    Projectiles (Bow) +10 and a Longbow with 12 Arrows\n    </p>"
    ]
  },
  {
    "file": "vFUVWZ1l8wpTjLcx.js",
    "count": 1,
    "strings": [
      "Target has higher Willpower, no effect"
    ]
  },
  {
    "file": "vc4bELo0cWYoILfB.js",
    "count": 1,
    "strings": [
      "Choose a disease to heal (must be naturally occuring)"
    ]
  },
  {
    "file": "ve3RcfTi49rdYZU0.js",
    "count": 1,
    "strings": [
      "- Wounded"
    ]
  },
  {
    "file": "vejhfB9aI58iF1vr.js",
    "count": 1,
    "strings": [
      ", { 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:"
    ]
  },
  {
    "file": "vgfs0DXvF5iKrz1M.js",
    "count": 1,
    "strings": [
      "|| this.item.getFlag("
    ]
  },
  {
    "file": "vuzRRj5d9XdNYx3o.js",
    "count": 1,
    "strings": [
      "Removed Broken"
    ]
  },
  {
    "file": "wyTCozh9qGTx6yK0.js",
    "count": 1,
    "strings": [
      "Does not need to make Peur or Terror tests"
    ]
  },
  {
    "file": "x1Ecj6MXY94kpcQq.js",
    "count": 1,
    "strings": [
      ",\"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("
    ]
  },
  {
    "file": "yzN7ZNlgCiSVJqsU.js",
    "count": 1,
    "strings": [
      "Applied after effects"
    ]
  },
  {
    "file": "zK38Rl5t9zbFi4Se.js",
    "count": 1,
    "strings": [
      "Added Bleeding"
    ]
  },
  {
    "file": "zadppy7FEbXvgUON.js",
    "count": 1,
    "strings": [
      ", {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("
    ]
  },
  {
    "file": "zxG5KbliWE9xWNQD.js",
    "count": 1,
    "strings": [
      "Automatically passes any"
    ]
  }
]