[
{
"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 += \\`\\${this.actor.name} regagne \\${regen} Blessures.\\`;\n\n if (regen === 10) {\n message +=",
";\n }\n } else if (regen >= 8) {\n message += \\`\\${this.actor.name} a obtenu un \\${regen} et regagne 1 Blessure.\\`;\n wounds.value += 1;\n if (regen === 10) {\n message +=",
";\n }\n } else {\n message += \\`\\${this.actor.name} 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 += \"
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 += \"
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(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {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",
"
Apply Ward of Grimnir effect?
", "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 += `${this.actor.name} regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `1–6: add +1 SL
\n7–10: lose all accrued SLs and perform next Test at –1 SL
\n \n`;\n const choice = await foundry.applications.api.DialogV2.confirm({\n yes: {label:", "},\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 = `@ROLL`\n let msg =\n `${this.actor.prototypeToken.name} 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": [ "Grace is beyond style", "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(`${this.item.name} porté par ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(", ",\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(`${this.item.name} sur ${this.actor.name} a été retiré et perd ses propriétés. Cependant, les effets durent [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,\n {whisper: ChatMessage.getWhisperRecipients(", ",\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(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(", ",\n {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
Template: ${template.text}
\nPhsyical Quirk: ${physicalQuirk}
\nWork Ethic: ${workEthic}
\nPersonality Quirk: ${personalityQuirk}
\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", "\n Select your choice\n
\nDamage all Items carried?
", "}\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(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(", ",\n {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 += `${item.name} loses all Qualities
`\n }\n else \n {\n msg += `${item.name} crumbles into dust!
` \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(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(", ",\n {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 = `${this.actor.prototypeToken.name} 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": [ "Finished raisint the anchor.
", ",\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", "\n Select your choice\n
\n\n Select your choice\n
\n${await this.actor.applyBasicDamage(8, {loc :", ", suppressMsg: true, hideDSN: true})}
`\nmsg += `${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": [ "
Does the vessel have a magazine or any other kind of store for blackpowder?
", ");\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(`Wyrmslayer: 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(` i.toObject())\n\nthis.actor.createEmbeddedDocuments(" ] }, { "file": "96Y1yIH1lRjTs5hL.js", "count": 1, "strings": [ ")\n{\n this.actor.addCondition(" ] }, { "file": "9A7rYY3FKi5XLihG.js", "count": 1, "strings": [ "This Talent also extends to any metal object because of Metallic Affinity
" ] }, { "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 Willpower 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": [ "Speak and be known to me" ] }, { "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": [ ": 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": [ ": 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 Difficult (-10) Willpower 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": [ ": 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": [ ": Ignore +1 Metal Armour" ] }, { "file": "bgLeMqihLya2iobP.js", "count": 1, "strings": [ "Can only be applied to River Troll." ] }, { "file": "cK1Jysfu5IMUUH0C.js", "count": 1, "strings": [ "Ward 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": [ "Yield or die!" ] }, { "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 Difficult (-10) Résistance 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 `\n Sélectionnez votre choix\n
\nApply blunt damage reduction? (-3)
" ] }, { "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": [ ": 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\n Projectiles (Bow) +10 and a Longbow with 12 Arrows\n
" ] }, { "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" ] } ]