diff --git a/babele-register.js b/babele-register.js index 7c3c7b0..8e57b5b 100644 --- a/babele-register.js +++ b/babele-register.js @@ -1,4 +1,5 @@ /************************************************************************************/ +import loadScripts from "./loadScripts.js"; import statParserFR from "./modules/import-stat-2.js"; /************************************************************************************/ @@ -116,6 +117,8 @@ Hooks.once('init', () => { console.log("PARSER FR DONE"); return statParserFR(statString, type); } + + loadScripts(); /*---------------------------------------------------------------------*/ /* DEPRECATED : game.wfrp4e.entities.ItemWfrp4e.prototype.computeSpellDamage = function (formula, isMagicMissile) { diff --git a/fr.json b/fr.json index bdbfed5..41953ed 100644 --- a/fr.json +++ b/fr.json @@ -1684,7 +1684,7 @@ "NAME.TraitWeapon": "Arme", "NAME.TraitRanged": "A Distance", "NAME.TraitArmour": "Armure", - "NAME.MeleeBrawling": "Corps à coprs (Bagarre)", + "NAME.MeleeBrawling": "Corps à corps (Bagarre)", "NAME.AcuteSense":"Sens aiguisé", "NAME.AnimalCare":"Soins des animaux", "NAME.AnimalTraining":"Dressage", diff --git a/loadScripts.js b/loadScripts.js new file mode 100644 index 0000000..c170606 --- /dev/null +++ b/loadScripts.js @@ -0,0 +1,6 @@ +export default function() +{ + console.log("effectScripts loaded !!!"); + mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\n// takes 3 Poisoned Conditions that cannot be resisted at first,\nawait this.actor.addCondition(\"poisoned\", 3)\n\n// recovers a number of Wounds equal to their Toughness Bonus, \nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n\n// and acquires the Regenerate Creature Trait.\nconst hasRegenerate = this.actor.has(\"Régénération\")\nif (hasRegenerate === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\n let traitItem = trait.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n}\n\nthis.script.scriptMessage(`

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

\n C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.

\n

Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.

`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\n{\n args.fields.modifier += 10;\n args.flags.quietenedApplied = true\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Chargement des sorts\")\n\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\n\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\n\nif (text == \"GM's Choice\")\n{\n return this.script.scriptNotification(text)\n}\n\nif (spellsWithLore.length > 0)\n{\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\n this.script.scriptNotification(selectedSpell.name);\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\n}\nelse\n{\n ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\nlet data = item.toObject();\ndata.system.specification.value = fixation.result;\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\nif (!table)\n{\n\treturn ui.notifications.error(\"La table des Mutations n'a pas été trouvée. Assurez vous que la table avec la clé `mutatephys` est bien importée dans le monde.\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.scriptNotification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse \n{\n ui.notifications.error(\"L'item ne peut être trouvé: \" + uuid)\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\n{\n\treturn true;\n}\nelse \n{\n\targs.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says \"any gossip test can be reversed\" so check it here instead of submission\n}\n ","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore le m�tal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\n\nlet data1 = item1.toObject();\ndata1.system.location.key = this.item.system.location.key\n\nlet data2 = item2.toObject();\ndata2.system.location.key = this.item.system.location.key\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\n","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"stunned\")\n }\n})\n","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\n{\n args.flags.strikeToStun = true\n args.fields.modifier += 20;\n args.fields.hitLocation = \"head\";\n}\nargs.fields.successBonus++;","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif ([\"feu\", \"electricité\", \"poison\"].includes(type))\n{\n args.applyAP = false;\n}","16nCOByUaSFDym1V":"args.fields.modifier -= 20\n","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let terrain = name.split(\"(\")[1].split(\")\")[0]\n tests = tests.replace(\"Terrain\", terrain)\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n coastal : \"Côtes\",\n deserts : \"Déserts\",\n marshes : \"Marches\",\n rocky : \"Rocailles\",\n tundra : \"Tundra\",\n woodlands : \"Forêts\"\n }, this.item.img), 1, \"Choisir le Terrain\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = tests.replace(\"Terrain\", \"Terrain \" + choice[0].name )\n }\n }\n\n this.effect.updateSource({name})\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 5,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 5,\n \"dex\" : 5,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\nawait test.roll()\nif (test.succeeded)\n{\n this.effect.delete();\n}\n","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n}\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain d'un état Assomé\"}})\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"stunned\")\n}\n\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Ne peut saisir ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\nthis.actor.modifyWounds(healed)\nthis.script.scriptMessage(`Soins de ${healed} Blessures`)","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (!test.succeeded)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\n let data = item.toObject();\n if (this.item.system.location.key == \"rLeg\")\n {\n data.system.location.value = \"Pied droit\"\n\t data.system.location.key = \"rToe\";\n }\n else if (this.item.system.location.key == \"lLeg\")\n {\n data.system.location.value = \"Pied gauche\"\n\tdata.system.location.key = \"lToe\";\n }\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"stunned\", 3)\n }\n})","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\n args.data.damage -= 1","1wKVvxRTHOyV4Qdv":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Sail\"))","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choisir une localisation\");\n\nlet location = choice[0].id;\n\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\n\nif (itemTargeted)\n{\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\n}","1yOvw74jzFfaI87b":"return args.options.reload\n","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\n{\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\nlet data = item.toObject();\ndata.system.location.value = \"Dos\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true;\n\nif (args.options.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\n {\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\n }\n} ","2W9uMTT6iJhfQ044":"let skill = `Métier (${this.item.parenthesesText})`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\nif (existingSkill && inCurrentCareer)\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\tcurrentCareer.system.skills.push(skill);\n}\n\n\n","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\n{\n args.bleedingHand = true;\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\n if (!success)\n {\n args.abort = true;\n }\n}","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Ouïe)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\n{\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"Vide !\", \"error\")\n}","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\n ui.notifications.notify(`${this.effect.name}: Gain de ${this.item.Advances} Avantages`)\n this.actor.setAdvantage(this.item.Advances)\n }\n}","2sDH6RvoOAR40oqH":"\n\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\n await test.roll();\n if (test.failed) {\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\n }\n}\n\n// Since wounds change when the effect is deleted, need to wait until after \n// the max wounds have been recalculated to apply damage\ngame.wfrp4e.utility.sleep(1000).then(async () => {\n let roll = await new Roll(\"1d10\").roll();\n\n roll.toMessage(this.script.getChatData());\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\n\n})","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\nif (!currentCareer)\n{\n return;\n}\n\nlet talents = [\"Aethyric Attunement\",\n\"Arcane Magic (Any)\",\n\"Chaos Magic (Tzeentch)\",\n\"Fast Hands\",\n\"Instinctive Diction\",\n\"Magical Sense\",\n\"Petty Magic\",\n\"Second Sight\",\n\"War Wizard\",\n\"Witch!\"].filter(t => !currentCareer.system.talents.includes(t))\n\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\nif (wounds.value == 0)\n return this.script.scriptNotification(\"Aucun effet à 0 Blessures\", \"error\")\n\nthis.script.scriptNotification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\n{\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\n}","33US8YRgaMqYu2We":"return !args.options.handling","37UN17gb8suFeZIW":"this.script.scriptMessage(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\nif (fatigue)\n{\n this.script.scriptNotification(\"Suppression de l'état Fatigué, effet désactivé.\")\n this.effect.update({disabled : true})\n await this.actor.removeCondition(\"fatigued\")\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choose Location\");\nif (choice[0])\n{\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\n}\n\nlet location = choice[0].id;\n\nif ([\"lArm\", \"rArm\"].includes(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.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nif (location == \"body\")\n{\n await this.actor.addCondition(\"fatigued\");\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"prone\");\n }\n}\n\nif (location == \"head\")\n{\n await this.actor.addCondition(\"stunned\");\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"unconscious\");\n }\n}","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\n\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\n\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\n{\n args.item.qualities.value.push({name : \"penetrating\"})\n args.item.qualities.value.push({name : \"impale\"})\n}","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3eSaX0BeaUalNkEP":"return args.options.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3hfMQkUKYI4rCuBy":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","3jm0NoYpgB6ZuUSl":"args.options.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.scriptMessage(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\nthis.actor.addCondition(\"ablaze\");","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\n}\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\nawait args.actor.addCondition(\"prone\")","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\n//let skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\nlet skills = [\"Calme\", \"Equive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\n\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\n\nlet trappings = [\"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\n this.script.scriptMessage(`${this.actor.name} perd 1 point de ${game.wfrp4e.config.characteristics[char]}`)\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\n }\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","4pQW4WLyhjbZR85k":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}, context : {failure: \"1 Corruption Point Gained\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gain d'un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"bleeding\");\n}\n","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\n await test.roll();\n if (test.failed)\n {\n args.totalWoundLoss += 5;\n args.modifiers.other.push({label : this.effect.name, value : 5})\n }\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\nawait args.actor.addCondition(\"entangled\")","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","52mwb33mGrQjq89B":"return args.skill?.name != game.i18n.localize(\"NAME.Research\");","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\nlet damage = args.totalWoundLoss;\nlet tb = sourceActor.system.characteristics.t.bonus\nargs.abort = `${this.effect.name}: Dommages appliqués à ${sourceActor.name}`;\n\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\n\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\n this.script.scriptMessage(`1 Point de Fortune volé à ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","5Fe1ELaS6Gnvy0Cj":"return args.skill?.name.includes(\"Focalisation\") || args.type == \"channelling\" || args.skill?.name == game.i18n.localize(\"NAME.Charm\") || args.skill?.name.includes(\"Langue (Magick)\") || args.type == \"cast\"","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JWC0l3JEpOsqbR9":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 0\n}\nlet skills = [\"Esquive\", \"Perception\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Flee!\", \"Marksman\"]\nlet trappings = [\"Hand Weapon\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5JvKJZPcd6Hz5zvn":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 20,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 15,\n \"fel\" : 0\n}\n//let skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Leadership\"]\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Commandement\"]\nlet skillAdvancements = [15, 15, 10, 5]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = this.effect.name + \" \" + updateObj.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5LdJCKfQem1AQK24":"\nif (!args.flags.howlingWarpGale)\n{\n args.fields.modifier -= 10;\n args.flags.howlingWarpGale = true; // prevent double application\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += ` (Suivants de Tzeentch)`;\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\nanimosity.system.specification.value = \"Suivants de Nurgle\";\n\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\n\nroll.toMessage(this.script.getChatData());\n\nlet mutations = [];\nlet msg = `

Mutations acquises

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

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

`\n mutations.push(item.toObject());\n }\n}\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5dR7Erj3nwsxLAV7":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Luck\", \"Resolute\", \"Unshakable\", \"War Leader\"]\nlet trappings = [\"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\n{\n args.fields.successBonus += 1\n}\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\n{\n args.fields.modifier -= 10;\n}","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5sI9iYh5j2nx2XyT":"return !([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\n{\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\nconst hasColdBlooded = this.actor.has(\"A Sang Froid\")\nif (hasColdBlooded === undefined) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n this.script.scriptMessage(`

${this.actor.prototypeToken.name} reçoit le Trait de Créatuer A Sang Froid et peut inverser n'importe quel test de Force Mentale échoué.

\n

Si il reçoit un état Surpris, cet état n'est pas perdu la première fois (typiquement à la fin du Round ou si il est attaqué).

`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.
\n Il gagne +1 Point de Corruption point si un Test de Corruption est échoué, à appliquer manuellement.
Si le personnage porte le masque pendant plus d'une heure ou utilise les effets du masque, il est exposé à une @Corruption[moderate]{Corruption Modérée} \n `,\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.scriptMessage(`${this.item.name} de ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être manuellement supprimés.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}","6EXkbVTRBhKTEu81":"if (!args.flags.bothEyes)\n{\n\targs.flags.bothEyes = true;\n\targs.fields.modifier -= 30\n}","6Fe8M5MdklKS2olx":"return args.characteristic != \"fel\"","6H6vNjzvMGl2ZqCR":"if (args.totalWoundLoss > 0)\n this.script.scriptMessage(`Lame de Nurglitch: ${args.actor.name} doit réussir un Test d'Endurance Difficile (-10) ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","6JrUjs3g5x6bFnj3":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet sense = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet biteData = bite.toObject();\nlet senseData = sense.toObject();\n\nbiteData.system.specification.value = 6 - this.actor.characteristics.s.bonus;\nsenseData.name = senseData.name += \" (Odorat)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, senseData], {fromEffect : this.effect.id})","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\n{\n this.effect.delete();\n}","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Régénération')\n\nif (regenerate)\n{\n let effect = regenerate.effects.contents[0]\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\n \n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\n}","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"ablaze\")","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n{\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n}\nelse if (args.test.isFumble && roll != 1)\n{\n args.test.result.other.push(\"Résultat du Raté: \" + roll)\n}\n\n","6elUNF58TaiYjxcx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gained a Stunned Condition\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\");\n}","6fElmBxTjdAaubbK":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"average\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}\n","6hAgggYpNR3r4QWC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0\")\nitem = item.toObject()\nlet species = args.actor.Species || \" de votre espèce\"\nitem.name = `Animosité (tous sauf ${species})`\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","6jcTzK1XEuWqAacN":"args.abort = true;\nthis.script.scriptNotification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag(\"wfrp4e\", \"location\")]}!`, \"error\")","6kifXp2jXEaQVJsg":"let useWard = await Dialog.wait({\n\ttitle : this.effect.name,\n\tcontent : `

Utiliser Ward fourni par ${this.effect.name}?`,\n\tbuttons : {\n\t\tyes : {\n\t\t\tlabel : \"Yes\",\n\t\t\tcallback: () => {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tno : {\n\t\t\tlabel: \"No\",\n\t\t\tcallback: () => {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n})\n\nif (useWard)\n\targs.ward = 9;","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.scriptNotification(\"Avvantage soustrait\")\n}\nelse \n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nitem = item.toObject()\n\nitem.system.specification.value = 10;\nitem.name += \" (Feu)\"\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\n\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\n{\n\tthis.script.scriptNotification(\"Impossible de mettre à jour la Fortune\");\n\tdelete args.data.system.status.wounds.value;\n}","715G1Bf0haOHvmYQ":"return !(args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")))","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Corps à corps (Base)\")\n{\n args.item.system.modifier.value += 20;\n}","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\n{\n ValueDialog.create(\"Sasir le nombre de Blessures perdues en échange de DR\", this.effect.name, \"0\").then(async value => {\n value = Math.clamped(value, 0, 3)\n if (value == 0)\n {\n return; \n }\n else if (Number.isNumeric(value))\n {\n this.script.scriptNotification(`Perte de ${value} Blessures`)\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.test.addSL(value);\n args.test.preData.other.push(`${this.effect.name}: +${value} DR`)\n }\n })\n}","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\n\nif (args.equipped) \n{ \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.
\n Si le personnage porte le masque pendant plus d'une heure ou bénéficie de ses effets, il s'espose à une @Corruption[moderate]{Corruption Modérée}. \n `,\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.scriptMessage(`${this.item.name} porté par ${this.actor.name} a été enlevé et a perdu ses capacités. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}","7OmrMjaU48o2FEZi":"\nthis.actor.characteristics.t.bonus = 10\n\nthis.actor.details.move.value = 0;\nthis.actor.details.move.walk= 0;\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.scriptNotification(`Suppression de ${poisoned.conditionValue} états Empoisonné`)\n poisoned.delete(); \n}\nelse\n this.script.scriptNotification(`Aucun état Empoisonné`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Revendiquer le Bonus de ${this.effect.name} `);","7e8FgQUF2oANANmx":"return args.skill?.name == \"Corps à corps (Bagarre)\" || args.item?.weaponGroup?.value == \"brawling\"","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\n args.prefillModifiers.modifier += 10; \n\n\nargs.prefillModifiers.successBonus += 1; \n","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\nawait test.roll();\nif (test.failed)\n{ \n await this.actor.addCondition(\"fatigued\")\n} ","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\nconst hasPainless = this.actor.has(\"Insensible à la douleur\");\nif (hasPainless === undefined) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n this.script.scriptMessage(\n `

${this.actor.prototypeToken.name} gagne le Trait de Creature Insensible à la Douleur. Cet effet dure 1 heure, après quoi il disparait et le total des Blessures encaissés par le buveur sont encaissés d'un coup.

\n

Notez que cela n'empêche pas le buveur de recevoir une Blessure Critique ou de mourrir. Cela permet par contre d'éviter la majorité de leur effets.

`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\n}","84IB8CWa55XzoAkv":"return ([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\nif (!this.actor.has(\"Mort-vivant\") && !this.actor.has(\"Démoniaque\")) \n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), { appendTitle: \" - \" + this.effect.name, fields: { difficulty: \"average\" }, context: { failure: `Pert de ${strLoss} en Force et ${tghLoss} en Endurance` } }).then(async test => {\n await test.roll();\n if (test.failed) {\n this.actor.update({ \"system.characteristics.s.initial\": this.actor.system.characteristics.s.initial - strLoss, \"system.characteristics.t.initial\": this.actor.system.characteristics.t.initial - tghLoss })\n }\n })\n\n}\nelse {\n this.script.scriptNotification(`${this.actor.name} est immunisé à ${this.effect.name}`)\n}\n","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\nlet types = {\n none : \"Aucun\",\n cold : \"Froid\",\n corrosion : \"Corrosion\",\n fire : \"Feu\",\n electricity : \"Electricité\",\n poison : \"Poison\",\n smoke : \"Fumée\",\n various : \"Divers\"\n}\nif (!type)\n{\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choisir le Souffle\"))[0]?.id;\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\n}\n\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\n{\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\n}","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n\targs.fields.modifier -= 10;\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8N3Uqjq1ZxPxo4pk":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Lore\"))","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\n{\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8TRiAJ8thIKE4IoL":"\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\n\nargs.actor.characteristics.i.modifier += 10 * SL\nargs.actor.characteristics.ag.modifier += 10 * SL","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\n{\n args.actor.addCondition(\"ablaze\")\n}","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Range)\n if (Number.isNumeric(range))\n {\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\n }\n}","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\nawait test.roll();\n\nif (test.succeeded)\n{\n this.actor.addCondition(\"stunned\") \n}\nelse if (test.failed)\n{\n this.actor.addCondition(\"poisoned\", 2);\n}","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\n\nif (APIgnored)\n{\n args.modifiers.ap.ignored += APIgnored\n args.modifiers.ap.details.push(`${this.effect.name}: Ignorer les PA avec des Points Faibles (${APIgnored})`)\n}","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\nargs.item.system.qualities.value.push({name : \"impact\"})\n","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\nif (caster)\n{\n let healed= caster.characteristics.wp.bonus\n this.actor.modifyWounds(healed);\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regagne ${healed} Blessures`)\n}","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\n\nif (weakpointsAP > 0)\n{\n args.modifiers.ap.ignored += weakpointsAP;\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore les Points Faibles (${weakpointsAP})`);\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\nitem.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\nthis.actor.characteristics.int.value= \"-\"\nthis.actor.characteristics.wp.value= \"-\"\nthis.actor.characteristics.fel.value = \"-\"","8zTkDVziBPaNbMQX":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, \"Choisir 6 sorts de Magie Mineure\")\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, \"Choisir 9 Sorts d'Arcane\")\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\n return\n\nif (args.test.characteristicKey == \"wp\")\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\n let data = item.toObject();\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\n data.system.description.value += \"

Ce Talent s'applique également à tout objet métallique à cause de l'Affinité Metallique

\"\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n})","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name += ` (Odorat)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.name += ` (Si Charge)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\n\tthis.script.scriptNotification(\"Applique après les effets\");\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.name += \" (Aucun PA)\"\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\n","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptNotification(\"Subi une Blessure Purulente\")\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\n}\nelse \n{\n this.script.scriptNotification(\"Evite une Blessure Purulente\")\n}\n","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\n{\n this.script.scriptMessage(`Reçoit ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (args.test.failed && this.actor.type == \"character\")\n {\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\n }\n}","A1odAcuRbq9797ZB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Armes d'hast)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\n\nlet choice = await Dialog.wait({\n title : \"Choix\",\n content : \n `

\n Choisissez une option\n

\n
    \n
  1. Corps à corps (Base)
  2. \n
  3. Corps à corps (Armes d'hast)
  4. \n
\n `,\n buttons : {\n 1 : {\n label : \"Basic\",\n callback : () => {\n return choice1;\n }\n },\n 2 : {\n label : \"Armes d'hast\",\n callback : () => {\n return choice2;\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","A3MW0UksYrHGa0Qw":"return [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic);","A3fvV69RS1lYgma0":"if (this.actor.type == \"character\") \n this.actor.corruptionDialog(\"minor\")\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif(test.failed)\n{\n await this.actor.addCondition(\"unconscious\");\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\n await secondTest.roll();\n if(secondTest.failed)\n {\n await this.actor.addCondition(\"fatigued\");\n }\n}","A6DcKPzAGntzSCil":"let roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","ACgKpKrEEHoNGG0h":"return !args.skill?.name.includes(\"Focalisation\") && args.type != \"channelling\"","ACtDCTLZXmd5uXjX":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await Dialog.confirm({title : this.effect.name, content : \"Diviser les dommages? (Divise par 2 tout les dommages autre que ceux causés par le feu, le froid et magiques)\"})\n}\nelse\n{\n halve = false;\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par 2\", value : \"× 0.5\"})\n}","AGD7zCyV4zruvnWu":"return args.type != \"cast\" || ![\"mort\", \"nécromancie\", \"vie\", \"lumière\", \"cieux\"].includes(args.spell?.system.lore.value)","AHZ8f7dfN8jNsYk6":"let token = this.actor.getActiveTokens()[0];\nlet target = args.data.targets[0];\nlet weapon = args.weapon;\n\nif(!target || !token)\n{\n return;\n}\n\nlet distance = canvas.grid.measureDistances([{ ray: new Ray({ x: token.center.x, y: token.center.y }, { x: target.center.x, y: target.center.y }) }], { gridSpaces: true })[0]\nlet currentBand\n\nfor (let band in weapon.range.bands) \n{\n if (distance >= weapon.range.bands[band].range[0] && distance <= weapon.range.bands[band].range[1]) \n {\n currentBand = band;\n break;\n }\n}\n\nreturn [game.i18n.localize(\"Long Range\"), game.i18n.localize(\"Extreme\")].includes(currentBand)","AI6bFrjWk4NH9FBd":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","ALuPRzf85dmkEfLo":"return args.skill?.name == game.i18n.localize(\"NAME.Intuition\");","AMI2wDJqsIZsoq1e":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.scriptMessage(`Émet un nuage de poudre noire nauséabonde. Active l'effet Fellowship Penalty sur @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","AMxezwtYnWCF6Oza":"return args.skill?.name == \"Projectiles (Poudre noire)\"","AS7CstSosuCrwZ19":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","AV2Kj6jgmIc45zKi":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","AVROqafFhKjN6TPR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","AWgZnm9xLyIWCDnp":"let robust = args.modifiers.other.find(i => i.key == \"robust\")\nif (robust)\n{\n\trobust.value--;\n}\nelse \n{\n\targs.modifiers.other.push({key: \"robust\", label : this.effect.name, value : -1})\n}\n","AZGXrZOQ4EzjxRL9":"return true;","Adgs6Zs0FdefO6qx":"if (args.test.options.pilot && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: DR limité à 1`)\n}","Ah2wyywkL8hjJNXM":"args.options.healWounds = true;","AjC4dsiuhVCOnRGI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","AmOMCUaWLJ2iJAt5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IFKWu98qmWpaSfUi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","AmpDbT0BkDHeaRzf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\");\nlet data = item.toObject();\ndata.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ApaLcUhuty3EzJoP":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses points de Destin augmentés de ${current} à ${fortunePoints + current}`)","AqHLHp4kH6KULk3e":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"Aucun disponible!\", \"error\")\n}","AyNb5sj6FD2Z3Q5T":"this.actor.addCondition(\"dead\")\nthis.actor.setWounds(0);\nthis.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"scatter\"))","AyS3iLljxHRKsHg4":"let broken = this.actor.hasCondition(\"broken\");\nlet fatigued = this.actor.hasCondition(\"fatigued\");\nawait broken?.delete();\nawait fatigued?.delete()\nlet drilled = await fromUuid(\"Compendium.wfrp4e-core.items.Item.J9MK0AIaTbvd5oF6\")\nlet fearless = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet stout = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IogM5gnsoOX63w7j\")\nthis.actor.createEmbeddedDocuments(\"Item\", [drilled, fearless, stout], {fromEffect : this.effect.id})","B063u4vrbvzMaCQt":"args.item.system.flaws.value = args.item.system.flaws.value.concat([{name : \"bulky\"}, {name : \"unreliable\"}])","B1xgRS00RcTIZLnO":"return [\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\")","B6ZbY3bxTPg6nCng":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\");","B87v1twc65qyvUWi":"args.fields.modifier += 10 * this.effect.conditionValue","B950b0XnIUYCdVwu":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\n\nif (test.succeeded)\n{\n if (args.totalWoundLoss <= parseInt(test.result.SL))\n {\n args.abort = `${this.effect.name}: Attaque détournée et renvoyée`\n }\n args.modifiers.other.push({label : this.effect.name, value : -1 * parseInt(test.result.SL)})\n}","BAOv7moTxsKlT3JS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"easy\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"broken\")\n}","BD7bVTU2pVoRSRBe":"let symptoms = {\n convulsions : \"Convulsions\",\n coughsandsneezes : \"Coughs and Sneezes\",\n fever : \"Fever\",\n flux : \"Flux\",\n nausea : \"Nausée\"\n}\n\nlet roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nroll.toMessage(this.script.getChatData());\n\nlet choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, \"Choisissez les Symptomes\");\n\nif (choices.length)\n{\n let symptomEffects = duplicate(game.wfrp4e.config.symptomEffects)\n let added = []\n for(let choice of choices)\n {\n let symptom = symptomEffects[choice.id];\n symptom.origin = this.effect.uuid;\n added.push(symptom);\n }\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", added)\n}\nelse \n{\n this.effect.delete();\n}\n\n","BHbFqhJPzZI2txLs":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 2\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","BcXTujburrHpjpwa":"args.fields.slBonus -= 3;","Be5rdfnZorbILhpC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 3 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Bexspr5viPhHiFmU":"let fatigued = this.actor.hasCondition(\"fatigued\");\nlet value = fatigued?.conditionValue || 0;\nargs.fields.modifier += value * 10;","Bj6bxItlgtI2sXVN":"let roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData());\nargs.totalWoundLoss = Math.max(0, args.totalWoundLoss - roll.total)\nargs.modifiers.other.push({label: this.effect.name, value : -1 * roll.total})\nthis.effect.update({disabled : true})","BtyFhdGMKiMamGhM":"let test = await args.actor.setupSkill(\"Esquive\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nlet damage = parseInt(this.effect.sourceTest.result.SL)\n\nif (test.succeded)\n{\n damage = damage + 8 - parseInt(test.result.SL)\n}\n\nelse \n{\n damage = damage + 10\n this.actor.addCondition(\"entangled\", 3)\n}\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", suppressMsg: true}))\n","Bv3431tnG3VKaTJr":"if (args.test.result.castOutcome == \"success\")\n{\n args.test.result.other.push(`@Fear[2,${this.actor.name}]`);\n}","ByhEa1BxQOyrOmqg":"return args.item?.attackType == 'melee'","BzDLuxBNw1QNIacg":"if (args.item.type == \"skill\")\n args.item.system.advances.value = 0\n\nif (args.item.type == \"talent\")\n args.item.system.tests.value = \"\"\n\nif (args.item.type == \"weapon\") \n args.item.system.qualities.value = []","CCK1iIfPmB398ziT":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {fields : {difficulty : \"difficult\"}, skipTargets: true, appendTitle : \" - Walking\"})\ntest.roll();","CCwuu3bPLCpVGAmb":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\n","CDASLC4fWKSGQKf9":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded?.getFlag(\"wfrp4e\", \"flockOfDoom\"))\n{\n blinded.delete();\n}","CHnaBPHk6HdFS512":"let arm = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\");\nlet leg = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\");\n\nlet choice = await ItemDialog.create([arm, leg], 1, \"Choisir le Membre\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})","CIxZYkHggBQ6EsHP":"this.script.scriptNotification(\"Effet utilisé\");\nthis.effect.delete();","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\n\nlet lostFingers = this.actor.flags.useless[key] || 0;\n\nlostFingers += 1\n\nthis.actor.flags.useless[key] = lostFingers;\n\nif (lostFingers >= 4)\n{\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\n{\n if (effect.isCondition)\n {\n effect.delete();\n }\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\n{\n this.actor.modifyAdvantage(-3);\n this.script.scriptNotification(\"Avantage soustrait\")\n}\nelse \n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Exposition Mineure à la Corruption}`\n )\n this.script.scriptMessage(`${this.effect.name}: \n @Corruption[moderate]{Exposition Modérée à la Corruption}
\n ${args.actor.prototypeToken.name} doit réussir un \n Test de Corruption (Modéré)`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n}","Ca1fXHTA1e2QLx0D":"args.fields.modifier += 50;","CiFeduksZJ6PRulx":"return args.skill?.name == \"Chevaucher (Cheval)\" || (args.options.dodge && this.actor.isMounted);","Cjj4iLkdY1NaZRCi":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Projectiles\")))\n{\n let choice = await Dialog.wait({\n title: this.effect.name,\n content: `

Appliquer les dommages de ${this.effect.name} à l'attquant?`,\n buttons: {\n yes: {\n label: \"Oui\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"Non\",\n callback: () => {\n return false;\n }\n }\n }\n })\n\n if (choice)\n {\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\n }\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n\n\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"unconscious\")\n}","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\n\n","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Métier (Apothicaire)\" || args.skill?.name == \"Métier (Alchimiste)\"","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\ntooth = tooth.toObject()\ntooth.system.specification.value = 3\ntooth.system.qualities.value = [{name : \"magical\"}]\n \nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nclaw = claw.toObject()\nclaw.system.specification.value = 4\nclaw.system.qualities.value = [{name : \"magical\"}]\nclaw.name = \"Claw\"\n\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \n{\n\tlet roll = await new Roll(\"1d10\").roll()\n\tawait roll.toMessage(this.script.getChatData());\n\tif (roll.total == 9 || roll.total == 10)\n\t{\n\t this.script.scriptMessage(`${this.actor.name} attaché à ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} tombe.`)\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \n\t}\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\n\nthis.item.updateSource({\"system.location.key\" : letter + \"Doigt\"})\n\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create(\"Selectionnez la colonne pour déterminer la Tête de Bête\", \"Sélectionner la colonne\", \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\n\nif (column)\n{\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\n this.script.scriptMessage(`${result.title}
${result.result}`);\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n let item = await fromUuid(uuid);\n if (item)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n this.item.delete();\n }\n}","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\nawait test.roll();\nif (test.failed)\n{ \n await this.actor.addCondition(\"blinded\");\n await this.actor.addCondition(\"fatigued\")\n} ","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athlétisme\"","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\n\nif (this.actor.system.status.advantage.value >= 3)\n{\n this.script.scriptNotification(`Ajout de ${frenzy.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\n}\nelse if (this.actor.system.status.advantage.value >= 1)\n{\n let data = hatred.toObject();\n data.system.specification.value = \"Combatants au corps à corps\"\n this.script.scriptNotification(`Ajout de ${hatred.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\n{\n blinded.delete()\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\n\nawait test.roll();","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\n{\n this.script.scriptNotification(\"Ajout de A Terre\");\n this.actor.addCondition(\"prone\")\n}","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\nlet data = item.toObject();\ndata.name += \" (A déterminer)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\nthis.script.scriptMessage(`Soigne ${this.actor.system.characteristics.t.bonus * 3} Blessures`)\n\nthis.actor.hasCondition(\"bleeding\")?.delete()\nthis.actor.hasCondition(\"fatigued\")?.delete()\n","EQ5dtGW5kQhtAb87":"await this.actor.addCondition(\"prone\")\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"stunned\")\n}","ERxrWzSpw8qwxFVi":"this.script.scriptNotification(`Ne peut entrer ${this.effect.name}!`); this.actor.addCondition(\"broken\");","EU5j0hnDTG9Z6d1e":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif(test.failed)\n{\n this.actor.addCondition(\"stunned\", 2)\n}","EVBSHEC5nmmj2X41":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","EYny6z5oTOhxGDfb":"args.fields.modifier -= 10;\n","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\")\n}","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n this.script.scriptMessage(\"Peut effectuer une Action ou un Mouvement (en choisir un)\")\n}\nelse \n{\n this.script.scriptMessage(\"Ne peut pas effectuer d'Action ou de Mouvement ce round\") \n}","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif(test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n {\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n }\n else if (args.test.isFumble && roll != 1)\n args.test.result.other.push(\"Raté résultat: \" + roll)\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ErgOwSiVnm9VLVHN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Et4tPHlrkueLqP3T":"if (args.item.type == \"skill\") args.item.system.modifier.value -= 10","Ew3C2WmLCtc1KT46":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")) || args.item?.id == this.item?.id","EwD053Fyy46b59ZI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.6l3jvIAvrKxt0lA9\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eye6dranWpNsILjm":"if (this.actor.system.status.wounds.value <= 1)\n{\n this.effect.delete();\n}","F4aGsdzJ9SYcX57F":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.HpFkVJ2lYPAWumUL\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FAB12eLcSCAOOQwk":"this.script.scirptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true});","FAf4iXj5LkdvukS2":"fromUuid(\"Compendium.wfrp4e-wom.items.0Xdm4r7l2EwC4fcg\").then(item => Item.create(item.toObject(), {fromEffect : this.effect.id, parent : this.actor}))","FMA16PvoObBV8vDl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nitem = item.toObject()\nitem.system.specification.value = 20\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\nthis.script.scriptNotification(item.name + \" added\")","FMSN5uRskkATexzB":"game.wfrp4e.tables.rollToChat(\"crithead\")","FSqUqSByMiztYOQM":"if (args.totalWoundLoss > 0)\n this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Ride (Horse)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","FYUPfYyTYZkxRLFT":"return ![\"NAME.Endurance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n this.script.scriptNotification(\"Added Bleeding\")\n}","FciJSTq7dZsZIPgl":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FfTqCPxCoxwGDTQs":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","FiD3mvWIBHNNIuO9":"if (args.opposedTest.result.hitloc.value == \"body\")\n{\n if ((await new Roll(\"1d2\").roll()).total == 1)\n {\n args.opposedTest.result.hitloc.value = \"head\"\n this.script.scriptMessage(`Hit location changed to Head`)\n }\n}","FkTwk8hfHpRLbAp2":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","FmLx9pwOkzqqU7Ph":"return args.skill?.name == game.i18n.localize(\"NAME.Track\");","FqevMs0ukQ9WuUHl":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (this.item.getFlag(\"wfrp4e\", \"brittle\"))\n{\n ChatMessage.create({content: `${this.item.name} shatters!`})\n this.item.update({name : `${this.item.name} (Shattered)`})\n}","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\n let wp = caster.system.characteristics.wp.value\n if (wp > this.actor.system.characteristics.t.value) {\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\n this.actor.update({ \"system.status.wounds.value\": 0 })\n this.actor.addCondition(\"dead\")\n }\n else {\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\n ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\n })\n }\n }\n}","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\nargs.actor.addCondition(\"ablaze\", ablaze)","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[1].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\n{\n\targs.fields.lostHand = true;\n\targs.fields.modifier += -20;\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\nawait test.roll();\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\n{\n args.item.system.AP.head = 0;\n}","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData())\n if (roll.total <= 3)\n {\n this.actor.addCondition(\"blinded\", 3)\n }\n else if (roll.total <= 6)\n {\n this.actor.addCondition(\"broken\");\n }\n else if (roll.total <= 9)\n {\n this.actor.addCondition(\"stunned\");\n }\n else if (roll.total == 10)\n {\n this.actor.addConditon(\"unconscious\")\n }\n}","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\n game.dice3d?.showForRoll(roll);\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Gained a Poisoned Condition\", success: \"Resisted the poison\" }})\n await test.roll();\n if (test.failed)\n {\n args.actor.addCondition(\"poisoned\");\n }\n}\n ","GbPEy22VuCNzlNv2":"return !this.actor.isMounted || (!args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) && !args.options.dodge)","Gc8S5TYlVdV8NnOT":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, context: { failure: \"Gained a Broken Condition\", success: \"Resisted the Broken Condition\" } })\n\n await test.roll();\n\n if (!test.succeeded)\n {\n args.actor.addCondition(\"broken\");\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\n{\n let removeRepeater = false\n if(!this.item.system.offhand.value) // main\n {\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\n if (offhandUsed)\n {\n removeRepeater = true;\n }\n }\n else // offhand\n {\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\n if (mainhandUsed)\n {\n removeRepeater = true;\n }\n }\n \n if (removeRepeater)\n {\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\n }\n}","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\n\neffects.splice(effects.length - 1);\n\nif (effects.length == 0)\n{\n return this.script.scriptNotification(\"All Effects have been used. Reset to select them again\")\n}\nlet choice = await ItemDialog.create(effects, 1, \"Choose Power to Gain\");\n\nif (choice[0])\n{\n choice[0].update({disabled : true})\n let effect = choice[0].convertToApplied();\n effect.name += ` (${this.effect.name})`\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\n}","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\n\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Select Wind\")\n//this.actor.createEmbeddedDocuments(\"Item\", items);\n\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\n\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\n\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\nif (bleeding)\n{\n this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`)\n bleeding.delete(); \n}\nelse \n{\n this.script.scriptNotification(`No Bleeding Conditions`)\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\n{\n args.test.options.criminal = true;\n let currentCareer = args.test.actor.system.currentCareer;\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\n if (coin != \"g\") // Don't roll for gold, just use standing value\n {\n dieAmount = dieAmount + \"d10\";\n }\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\n let moneyString = `${moneyEarned}${coin}`\n let transactionString = `${moneyEarned}${term}`\n\n this.script.scriptMessage(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\n{ \n args.test.result.description = \"Astounding Failure\";\n args.test.result.outcome = \"failure\";\n ChatMessage.create({content : \"SQUEAK\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\n}","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\n test.roll();\n})","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\n\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\n\nthis.script.scriptMessage(`Attaches to ${args.actor.name}`)","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Corruption Point Gained\" } })\nawait test.roll();\n\nif (test.failed && args.actor.type == \"character\") \n{\n let msg = \"\"\n msg += `

${this.actor.prototypeToken.name} gained a Corruption point

`\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n msg += `${args.actor.prototypeToken.name} gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}`\n }\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\n}","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), game.wfrp4e.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choose a Skill\")\n\n items = items.map(i => i.toObject())\n items.forEach(i => i.system.advances.value = 20)\n\nitems.forEach(i => equip(i))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.data.worn.value = true\n else if (item.type == \"weapon\")\n item.data.equipped = true\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\n item.data.worn = true\n}","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\n{\n\treturn;\n}\n\nlet index = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(index, 1, \"Choose a Lore\")\nlet text;\nif (!choice[0])\n{\n let custom = await Dialog.wait({\n title : \"Enter Lore\",\n content : \"\",\n buttons : {\n confirm : {\n label : game.i18n.localize(\"Confirm\"),\n callback : (dlg) => {\n return dlg.find(\"input\")[0].value\n }\n }\n },\n default : \"confirm\",\n close : () => {\n return \"\"\n }\n }) \n text = custom || \"\"\n}\nelse \n{\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\n}\n\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HOt2hHOiHDZ7oBgW":"if ([\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n{\n\targs.actor.details.move.value /= 2\n}\n","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\n{\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Flail)\")\n{\n args.item.system.modifier.value += 10;\n}","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \n// in melee combat must make an Average (+20) Endurance Test \n// or take a Stunned Condition\n\n\nif (args.totalWoundLoss > 1) {\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if(test.failed)\n {\n await args.actor.addCondition(\"stunned\");\n }\n}","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.scriptNotification(\"Added Bleeding\")\n}","HoNTnPphrJISSQr1":"ChatMessage.create({content : \"Speak and be known to me\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})","Hq1G30lhJYvtOSNb":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.preData.characteristic))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","HrOBAXsEX073ReKl":"let skill = `Entertain (Singing)`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\nif (existingSkill && inCurrentCareer)\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\tcurrentCareer.system.skills.push(skill);\n}\n\n\n","HrYchgkdZBiu1yPF":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\");","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n this.actor.addCondition(\"bleeding\")","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Cannot cast Spells or use Prayers\");\n}\nelse return true;","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","I9QAPKbaXwMMMBT4":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif(test.failed)\n{\n await this.actor.addCondition(\"stunned\");\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\n await secondTest.roll();\n if(secondTest.failed)\n {\n this.effect.updateSource({name : \"Taste of Death\"})\n await this.actor.addCondition(\"fatigued\");\n }\n else \n {\n return false;\n }\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n this.actor.addSystemEffect(\"convulsions\")\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Symptom[Convulsions] for [[1d10]] hours`)\n }\n}","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif(test.failed)\n{\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\n return\n\nlet reach = args.item.reach.value\nlet reachNum = game.wfrp4e.config.reachNum[reach]\nreachNum = Math.min(reachNum + 2, 7)\n\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\n\nargs.item.reach.value = key","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\n\nif (test.failed)\n{\n await this.actor.addCondition(\"grappling\")\n}","IR5URcjnCuWBFMoN":"// If a full dose is imbibed, \n// the victim must pass a Hard (-20) Endurance Test.\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}})\nawait test.roll()\nif (test.failed)\n{\n this.script.scriptMessage(`

${this.actor.prototypeToken.name} notices nothing amiss save that they become tired a little earlier than usual. At this point it is still possible to save the victim via a powerful antidote or magical means.

\n

Once they fall asleep however, it is almost impossible. At this point the victim must make a Hard (-20) Endurance Test. If they fail, they never awaken.

`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n })\n}\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 1\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\nlet data = item.toObject();\ndata.system.specification.value = 3\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\n{\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\n}","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\n{\n this.actor.removeCondition(\"broken\")\n this.script.scriptNotification(`Cannot have Broken`);\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value || 1)\n\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value || 1)","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\n{\n return;\n}\n\nlet god = await ValueDialog.create(\"Enter a Deity\", \"Blessed\")\n\nif (god)\n{\n let prayers = await game.wfrp4e.utility.findAll(\"prayer\", \"Loading Prayers\")\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\n if (blessings.length)\n {\n this.script.scriptNotification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\n }\n else \n {\n this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)\n }\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\n await this.actor.update({\"system.details.god.value\": god})\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","J0IWUhxada2ONowP":" return args.skill?.name == \"Entertain (Sing)\" || args.skill?.name == \"Entertain (Singing)\" || (args.skill?.name.includes(\"Language\") && (args.skill?.name.includes(\"Magick\") || args.skill?.name.includes(\"Elthárin\") || args.skill?.name.includes(\"Cathayan\")))","J1FPDdrXGctKDTZz":"if (args.equipped)\n{\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n wardData = ward.toObject()\n wardData.system.specification.value = \"8\"\n \n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\n mrData = mr.toObject()\n mrData.system.specification.value = 2\n \n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\n}\nelse\n{\n this.effect.deleteCreatedItems()\n}","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}\n","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\nif (caster)\n{\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\n await this.actor.modifyWounds(healed);\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\n}\n \n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"vhard\"}, context : {success : \"1 Corruption point that was gained within the last hour is removed.\", failure: \"Nothing happens\"}})\n await test.roll();","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","JaiC5P6nIgctOacH":"if (args.actor.system.details.species?.value?.toLowerCase() == \"dwarf\")\n{\n args.weaponProperties.flaws.undamaging = true;\n}","JavuFNZ9Pj5elVLc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\n\nlet test = await this.actor.setupSkill(\"Athletics\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","JibNjuQrJRnY0yf9":"return this.actor.flags.useless.rEye && this.actor.flags.useless.lEye && ([\"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) || args.weapon || args.options.dodge)","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`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(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Language (Magick)\", \"Channelling (Hysh)\"].includes(args.skill?.name) ","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n this.script.scriptMessage(`Cannot be Surprised`);\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\n\nreturn true; // No need to show this in the dialog","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\n this.actor.addCondition(\"dead\")","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\nawait this.actor.addCondition(\"ablaze\")","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\nlet choice = [];\n\nif (!specification || specification == \"Trained Skills\")\n{\n choice = await ItemDialog.create(ItemDialog.objectToArray({\n broken: \"Broken\",\n drive: \"Drive\",\n entertain: \"Entertain\",\n fetch: \"Fetch\",\n guard: \"Guard\",\n home: \"Home\",\n magic: \"Magic\",\n mount: \"Mount\",\n war: \"War\"\n }, this.effect.img), \"unlimited\", \"Choose Training\");\n}\nelse \n{\n choice = specification.split(\", \").map(i => {\n return {\n id : i.toLowerCase(),\n name : i\n }\n });\n}\n\nif (choice.length)\n{\n let changes = foundry.utils.deepClone(this.effect.changes);\n\n for(let training of choice)\n {\n switch(training.id)\n {\n case \"broken\" : \n let roll = await new Roll(\"2d10\").roll(); \n roll.toMessage(this.script.getChatData());\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\n\n if (this.actor.type == \"creature\")\n {\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\n if (bestial)\n {\n bestial.update({\"system.disabled\" : true})\n }\n }\n break;\n\n case \"drive\" : \n\n break;\n\n case \"entertain\" : \n\n break;\n\n case \"fetch\" : \n\n break;\n\n case \"guard\" : \n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\n setProperty(args, \"options.keepId\", true);\n break;\n\n case \"home\" : \n\n break;\n\n case \"magic\" : \n\n break;\n\n case \"mount\" : \n\n break;\n\n case \"war\" : \n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\n break;\n }\n }\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\nif (!table)\n{\n\tui.notifications.error(\"Cannot find table with key: mutatemental\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.scriptNotification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse \n{\n ui.notifications.error(\"Item could not be found: \" + uuid)\n}","KIoVBinAZK8sMOqD":"\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Gained \" + disease.name)\n })\n }\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n }}));","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Schemer\", \"Second Sight\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += ` (Disease)`;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSjsDlsx3DD6cT16":"return args.skill?.name != game.i18n.localize(\"NAME.Bribery\");","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\nawait test.roll();\nif (!test.succeeded)\n{\n args.actor.addCondition(\"stunned\")\n}","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\nthis.actor.hasCondition(\"deafened\")?.delete()\nthis.actor.hasCondition(\"unconscious\")?.delete()","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \n{\n this.item.system.reduceQuantity();\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\n await test.roll();\n if (test.succeeded) \n {\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\n }\n else \n {\n this.script.scriptNotification(\"Heal Test failed!\", \"error\")\n }\n}\nelse \n{\n this.script.scriptNotification(\"None left!\", \"error\")\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, 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.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`)\n }\n })\n }","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\n{\n\targs.flags.lostFingers = true;\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"fatigued\");\n}","KyswmGj1uG3QS3ng":"args.applyAP = false;","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\n{\n this.script.scriptMessage(`${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, 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(\"stunned\", stuns)\n}","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \n{\n this.actor.addCondition(\"unconscious\");\n}\nelse \n{\n this.actor.addCondition(\"prone\");\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\n\nif(career)\n{\n career.system.current.value = true;\n}","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\n{\n args.opposedTest.swap(this.effect.label);\n}","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `${this.effect.name}: cannot move or take actions`}}).then(test => {\n test.roll();\n })\n}","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n await args.actor.addCondition(\"fatigued\");\n }\n}","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\n\nif (caster)\n{\n let bonus = caster.system.characteristics.wp.bonus\n this.actor.modifyWounds(bonus)\n\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\n}","M0XhKnWjG14pk3iH":"return !args.skill?.name.includes(\"Channelling\") && args.type != \"channelling\" && args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(\"Language (Magick)\") && args.type != \"cast\"","M2FshTX4PjKFVU8y":"args.flags.earCount = Number.isNumeric(args.flags.earCount) ? args.flags.earCount+1 : 1;\nif (args.characteristic == \"fel\")\n{\n\targs.fields.modifier -= 5;\n}\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\n{\n\targs.fields.modifier -= 20;\n}\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.scriptMessage(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\n this.effect.sourceItem.delete();\n }\n}","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n\targs.actor.addCondition(\"unconscious\")\n}\n\n","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyTerror(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postTerror(value, name)\n}","MI2GgNi3fZtUCtQD":"return [\"int\", \"wp\"].includes(args.characteristic)","MJB6WbZSF6Briz30":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\")","MSJWJEUrX7ZmMvAD":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\"))","McLR9YcgVUG3MooC":"args.applyTB = false;","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\n{\n this.script.scriptNotification(\"Immune to Ablaze\")\n await this.actor.hasCondition(\"ablaze\")?.delete()\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\n They cannot cast Spells or pray for Blessings and Miracles.
\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \n `,\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.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n\n\n\n","MgTqCMRjxhezT73T":"return args.fields.hitLocation == \"head\" && args.weapon?.system.properties.qualities.pummel","MgZreqq3Jua10c8s":"return ![\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","Mhb67xufvA9uWO21":"let actorSize = game.wfrp4e.config.actorSizeNums[args.actor.details.size.value]\nlet attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.value]\n\nif (attackerSize > actorSize)\n{\n args.actor.addCondition(\"prone\")\n this.script.scriptMessage(`Tail Attack: ${args.actor.prototypeToken.name} is now Prone`)\n}","Mir4FMHQRdVqazAF":"let actorSize = game.wfrp4e.config.actorSizeNums[args.actor.details.size.value]\nlet attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.value]\n\nif (attackerSize > actorSize)\n{\n let msg = `Tongue Attack: ${args.actor.prototypeToken.name} is now @Condition[Entangled]`;\n await args.actor.addCondition(\"entangled\");\n if (actorSize <= 2)\n {\n msg += `and @Condition[Engaged]`\n }\n this.script.scriptMessage(msg, {speaker : {alias: args.attacker.prototypeToken.name}})\n}","MkEcdViivk7abf1x":"args.actor.flags.meleeDamageIncrease += 1","MnXny8SCh6OceJc9":"return args.characteristic == \"int\"","MnqQkXVp20Lw84I1":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptMessage(await this.actor.applyBasicDamage(3, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","Mp8UjuCLa9jdzhBS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n if (!this.actor.hasCondition(\"fatigued\"))\n {\n await this.actor.addCondition(\"fatigued\");\n }\n else\n {\n await this.actor.addCondition(\"blinded\");\n await this.actor.addCondition(\"deafened\");\n }\n \n if (((this.actor.hasCondition(\"blinded\").conditionValue || 0) + (this.actor.hasCondition(\"deafened\").conditionValue || 0)) > this.actor.system.characteristics.i.bonus)\n {\n await this.actor.addCondition(\"unconscious\"); \n }\n}","Msygc7oQQPB5fw0b":"let test = this.effect.sourceTest;\nif (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n{\n\tlet points = await new Roll(\"1d10\").roll();\n\tgame.dice3d?.showForRoll(points)\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value + points.total})\n\tthis.script.scriptMessage(`Gains ${points.total} Corruption`)\n}\nelse \n{\n\tlet points = this.effect.sourceTest.result.overcast.usage.other.current;\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value - points})\n\tthis.script.scriptMessage(`Loses ${points} Corruption`)\n}","MwUzyAgd0yPnmZCH":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx\")\nlet data = item.toObject(); \ndata.name = data.name.replace(\"Target\", \"Strangers\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","Myl1Ishu9GBraYUZ":"this.actor.removeCondition(\"bleeding\")","N2MeOlf0GjPiRcSb":"let test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : \"Drops the item\"}})\nawait test.roll();","N7nGncsPrTz2ZbDA":"return !args.options.dodge || !this.actor.isMounted","N8hA6ysHCTlLd8Kj":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 15,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Channelling\", \"Cool\", \"Dodge\", \"Entertain (Storytelling)\", \"Intuition\", \"Language (Magick)\", \"Lore (Magic)\", \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\nlet talents = [\"Arcane Magic\", \"Petty Magic\", \"Second Sight\"]\nlet trappings = [\"Hand Weapon\", \"Quarterstaff\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","N9kA46ZQ9LiRjy6T":"return args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\");","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\nbrokenbone = brokenbone.toObject();\nteeth = teeth.toObject();\ntongue = tongue.toObject();\n\n\nlet roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\n\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nbrokenbone.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n}\n ","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","Na7Nanl9YmxZlTo7":"return args.type != \"cast\" && args.type != \"channelling\")","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nacutesense = acutesense.toObject();\nacutesense.name += \" (Smell)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Magic Resistance\", \"talent\")) \n return\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\n{\n let AP = parseInt(this.effect.sourceTest.result.SL)\n args.modifiers.ap.value += AP;\n args.modifiers.ap.magical += AP;\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\nargs.test.result.critModifier += 20;\n\nif (args.test.result.critical)\n{\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\n}","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","O7lXFZLrLdFaShGR":"args.options.catfall = true;","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\nlet biteData = bite.toObject();\nlet venomData = venom.toObject();\n\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\nvenomData.system.specification.value = \"Average\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OEy2lxvic37dRBEt":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Petty Spells\")\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Arcane Spells\")\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll();\nlet regen = regenRoll.total;\n\nif (wounds.value >= wounds.max)\n return\n\nif (wounds.value > 0) \n{\n wounds.value += regen\n if (wounds.value > wounds.max)\n {\n wounds.value = wounds.max\n }\n message += `${this.actor.name} regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `${this.actor.name} rolled a ${regen} and regains 1 Wound.`\n wounds.value += 1\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse \n{\n message += `${this.actor.name} Regenerate roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": wounds })\nthis.script.scriptMessage(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","OJMgS8ZQv0j4tEFf":"return [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","OMAUX1fnHyIpplul":"return ![\"fel\", \"dex\"].includes(args.characteristic)","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \nawait test.roll();","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\nargs.actor.system.characteristics.t.value += 30\n\nargs.actor.system.characteristics.s.bonus += 3\nargs.actor.system.characteristics.t.bonus += 3\n\nif (args.actor.system.characteristics.s.value > 100)\n{\n args.actor.system.characteristics.s.value = 100\n args.actor.system.characteristics.s.bonus = 10\n}\n\nif (args.actor.system.characteristics.t.value > 100)\n{\n args.actor.system.characteristics.t.value = 100\nargs.actor.system.characteristics.t.bonus = 10\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\nawait test.roll();\nif (test.succeeded)\n{\n this.actor.removeCondition(\"surprised\");\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\n{\n\tthis.script.scriptNotification(\"Disabled!\");\n\tawait this.effect.update({\"disabled\" : true})\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\n ","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\n\nblows = Math.clamped(blows, 0, difficulties.length - 1)\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\n{\n let difficulty = difficulties[blows];\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a Challenging (+0) Willpower Test`);\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\n }\n })\n}","OicQSEVZBbqLtrcf":"let choice = await ItemDialog.create(this.actor.itemTypes.critical, (this.effect.sourceTest.result.overcast.usage.other.current || 1), \"Choose the Critical Wounds to heal (cannot reattach body parts)\")\n\nthis.script.scriptMessage(`Healed ${choice.map(i => i.name).join(`, `)}`);\nthis.actor.deleteEmbeddedDocuments(\"Item\", choice.map(i => i.id))","OnkEe4ISru1hjJWP":"this.actor.flags.useless[this.item.system.location.key] = true;","Op88kMtimSEWlY2h":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","OqLKL0PiCvYH2QxW":"if (args.test.options.wallcrawler)\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalSuccess\");\n\t\t}\n\t\targs.test.result.outcome = \"success\"\n args.test.result.other.push(`${this.effect.name}: Minimum +0 SL`)\n\t}\n}","OqxeuZfZDfm9ax6h":"this.actor.system.status.addArmour(1, {locations : \"head\", source : this.effect})","OvIELZLvnlN2H2uw":"args.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}});","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\n{\n this.actor.modifyAdvantage(-1);\n this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\nthis.actor.addCondition(\"stunned\", roll.total)","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"unconscious\")\n}","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\n\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \n// reducing the SL of any spell affecting it by 3. \n// This effect lasts for one hour.\nconst hasMagicResistance = this.actor.has(\"Magic Resistance\")\n\nif (hasMagicResistance === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\n let traitItem = trait.toObject()\n traitItem.system.specification.value = 2\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n this.script.scriptMessage(`

${this.actor.prototypeToken.name} has gained the Magic Resistance Trait. This effect lasts for one hour.

`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}\n\nif (hasMagicResistance) {\n // Multiple doses may be consumed at once, with each one adding an additional 1 to the Magic Resistance rating and increasing the duration by one hour. \n let msg = `

${this.actor.prototypeToken.name} has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.

`\n\n // Resist toxic effect\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\n fields: {difficulty: \"challenging\"}\n }).then(async test => {\n await test.roll()\n\n // If they fail ...\n if (!test.succeeded) {\n msg += `

However, they begin to ooze the thick, poisonous slime that coats every Dreadmaw. They have gained 1 Poisoned Condition now and should continue to receive an additional @Condition[Poisoned] Condition at the end of each of the round.

\n

If they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.

`\n this.actor.addCondition(\"poisoned\", 1)\n }\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n })\n}\n","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","PdClojv7yNgQpOUc":"return args.skill?.name != game.i18n.localize(\"NAME.Endurance\");","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"(Lore)\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \n (this.actor.isOpposing || args.test.context.defending) && \n args.test.result.roll % 11 == 0 && \n args.test.succeeded && \n [\"Language (Magick)\", \"Dodge\"].includes(args.test.item?.name))\n {\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\n let text = `${this.effect.name}: Adding Unstable and Ward`\n args.test.result.other.push(text) \n this.script.scriptNotification(text);\n \n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n let wardData = ward.toObject();\n wardData.system.specification.value = 9;\n \n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\n let unstableData = unstable.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\n }\n","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\n item = item.toObject()\n item.system.specification.value = this.actor.characteristics.ag.value\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choose Size\");\n if (choice[0])\n {\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\n }\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \n{\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\n let results = roll.results[0]\n\n this.script.scriptMessage(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n })\n\n }\n\n","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","Q4EQgP4gZR8TTm7S":"let penalty = 0\nif (args.item?.system.attackType)\n{\n penalty -= 30\n}\nif (args.actor.has(\"Second Sight\", \"talent\"))\n penalty += 10\n\nargs.prefillModifiers.modifier += penalty","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\ndata.system.specification.value = \"When Alone\";\ndata.effects[0].disabled = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"alpha\": 0.5,\n \"animation\": {\n \"type\": \"\",\n },\n \"color\": \"#000000\",\n }}));","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\n","QPVVDPcJ4Xi5FmQl":"if(this.actor.hasCondition(\"fatigued\") && args.opposedTest.result.hitloc.value == \"head\" && (args.opposedTest.attackerTest.result.critical || args.actor.status.wounds.value - args.totalWoundLoss < 0))\n{\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"unconscious\")\n }\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\n args.item.damage.value += \" + 1\"","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\n\nif (choice[0])\n{\n\tthis.actor.removeCondition(choice[0].conditionId)\n}\n","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","QbIYnshWeP1U8SUy":"args.applyAP = false;\nargs.applyTB = false;","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\n}","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QoEOxRruQXYrZrv3":"let filters = [\n {\n property : \"type\",\n value : \"skill\"\n },\n {\n property : \"name\",\n value : /Melee/gm,\n regex: true\n }\n]\n\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, \"Choose 2 Skills to add +20\")\nitems = items.map(i => i.toObject())\nitems.forEach(i => i.system.advances.value = 20)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\n\nthis.script.scriptMessage(content)","R32U01LBjBrK1pns":" const templateMap = {\n 'P2e7Yx98bK3u110a' : \"\",\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\n }\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\n\n\n let templateItem = await game.wfrp4e.utility.findItemId(templateMap[template._id]);\n\n let bio = \n `\n

Template: ${template.text}

\n

Phsyical Quirk: ${physicalQuirk}

\n

Work Ethic: ${workEthic}

\n

Personality Quirk: ${personalityQuirk}

\n `\n \n this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\n\n if (templateItem)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 1\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\n\nas.name += \" (Sight)\";\n\nlet roll = (await new Roll(\"1d10\").roll());\nroll.toMessage(this.script.getChatData())\nlet items = []\n\nif (roll.total <= 2)\n{\n items = items.concat([as]);\n}\nelse if (roll.total <= 4)\n{\n items = items.concat([hv]);\n}\nelse if (roll.total <= 6)\n{\n items = items.concat([ms]);\n}\nelse if (roll.total <= 8)\n{\n items = items.concat([ss]);\n}\nelse if (roll.total <= 10)\n{\n items = items.concat([as, hv, ms, ss]);\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\n\nlet skill = await ItemDialog.create(skills, 1, \"Select the skill used by the weapon\")\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\n\nlet weapon = {\n\tname : this.effect.name,\n\ttype : \"weapon\",\n\timg : this.effect.img,\n\tsystem : {\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\n\t\t\"reach.value\" : \"average\",\n\t\t\"qualities.value\" : [{name : \"magical\"}]\n\t},\n}\n\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\nthis.script.scriptNotification(\"Item created. Further customization must be done manually within the Item's sheet\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.scriptMessage(\"Gained 2 Bleeding Conditions\")\n}","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.scriptMessage(`${this.item.name} Overloads!`)\n }\n}","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"disease\")\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choose a Disease\")\n\nif (choice[0])\n{\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\n}","RZlMkxJz5apn0mUj":"return args.item?.system.attackType != \"ranged\"","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\nawait args.actor.addCondition(\"deafened\");\nawait args.actor.addCondition(\"stunned\");","RrchOMpEdIvceJxl":"return args.skill?.name == \"Stealth (Rural)\"","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":" let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : -5,\n \"t\" : -5,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : -10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = []\n let skillAdvancements = []\n let talents = []\n let trappings = []\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (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 \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(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","S1QihXuvdEVzeRtB":"let dice = await new Roll(\"1d10\").roll()\nlet roll = dice.total\nlet talent \nlet message\nlet modifier = 0\n\nif (roll <= 3)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\n}\n\nelse if (roll <= 6)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.OEjUvJKi0xmBwbS2\")\n modifier = -3\n}\n\nelse if (roll <= 9)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mdPGZsn2396dEpOf\")\n modifier = -3\n}\n\nelse if (roll = 10)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\n modifier = -5\n}\n\nmessage = `${roll} Rolled, gain ${item.name}, ${modifier} Strength`\ndice.toMessage(this.script.getChatData())\n\nlet changes = duplicate(this.effect.changes)\nchanges[0].value = modifier\n\nthis.effect.updateSource({changes})\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})\n\nthis.script.scriptNotification(message)","S3DCTw4yJ85eSaKp":"this.actor.setupCharacteristic(\"s\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(test => test.roll())","S3Dev4hleOYqDNe9":"if (args.test.options.healWounds) {\n if (args.test.succeeded) \n {\n let wounds = this.actor.characteristics.int.bonus + Number(args.test.result.SL)\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n }\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`${this.actor.name} healed ${wounds} wounds of the patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n }\n}","S4793DLFhjMxpM8x":"return ![\"ws\", \"bs\"].includes(args.characteristic) && !args.item?.system.attackType && !args.options.dodge","S6tUyFJvGMV19mvP":"this.actor.status.addArmour(2, {source: this.effect})","S95QqpX1cZyIVCPy":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}\n\n","SGr50Hq1AHIEzIFN":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n int : game.wfrp4e.config.characteristics.int,\n fel : game.wfrp4e.config.characteristics.fel\n}, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","SLy1Fs3oXcHgFgjK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet value = getProperty(this.effect.sourceTest, \"result.overcast.usage.other.current\") || 1\ndata.system.specification.value = value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SO4Aa9argKbuO9rQ":"args.prefillModifiers.modifier -= 20","SPOkFWZWziZk5b7A":"return args.item?.system?.attackType != \"melee\"","SRmfstEs278bP9Pz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SSqGxyN9hw0HDmED":"this.actor.addCondition(\"prone\");","SWIJjM2RCmzfr64u":"if (args.test.result.hitloc.result == \"head\")\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40\n\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}\n","SrCHfOJFZwDickqa":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"average\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","StAderQaQQsxb6Rv":"let target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n this.script.scriptNotification(target.result);\n let hatred = this.actor.items.find(i => i.getFlag(\"wfrp4e\", \"fromEffect\") == this.effect.id)\n if (hatred)\n {\n hatred.update({\"system.specification.value\" : target.result})\n }\n}","SvFKt9hMcFQjeILA":"args.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\n{\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","TEiNj5FgkoD3YbhS":"this.actor.hasCondition(\"bleeding\")?.delete()","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","TY0xSQ00XXyEr49r":"args.fields.slBonus += 1;","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","TdjlJro0RRVSh8g8":"return args.skill?.name != game.i18n.localize(\"NAME.Gamble\") && args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\");","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\nlet test = await this.actor.setupTrait(stomp)\nawait test.roll();","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\n \"ws\": 45,\n \"bs\": 30,\n \"s\": 35,\n \"t\": 45,\n \"i\": 30,\n \"ag\": 35,\n \"dex\": 25,\n \"int\": 25,\n \"wp\": 30,\n \"fel\": 25\n}\nfor (let char in this.actor.characteristics) {\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\n this.actor.characteristics[char].initial = gorCharacteristics[char]\n}","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"unconscious\")\n}","TpZItJ5Ugbazaobd":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","Tq45Nd8J3eTvHT41":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.SetTrap\");","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\nlet data = item.toObject();\ndata.system.specification.value = \"Minor\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TwgdEucxcHloc4cX":"let choice1 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n {\n type : \"armour\",\n name : \"Leather Leggings\"\n },\n {\n type : \"armour\",\n name : \"Leather Skullcap\"\n },\n {\n type : \"armour\",\n name : \"Leather Jack\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plate Breastplate\"\n },\n {\n type : \"armour\",\n name : \"Plate Bracers\"\n },\n {\n type : \"armour\",\n name : \"Plate Helm\"\n },\n {\n type : \"armour\",\n name : \"Plate Leggings\"\n },\n]\n\nlet choice = await new Promise((resolve, reject) => {\n new Dialog({\n title : \"Choice\",\n content : \n `

\n Select your choice\n

\n
    \n
  1. Mail
  2. \n
  3. Mail & Leather
  4. \n
  5. Plate
  6. \n
\n `,\n buttons : {\n 1 : {\n label : \"Mail\",\n callback : () => {\n resolve(choice1)\n }\n },\n 2 : {\n label : \"Mail & Leather\",\n callback : () => {\n resolve(choice2)\n }\n },\n 3 : {\n label : \"Plate\",\n callback : () => {\n resolve(choice3)\n }\n }\n }\n }).render(true)\n}) \n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","TwwKxFjK6TNGKbRB":"this.script.scriptMessage(await this.actor.applyBasicDamage(12, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addSystemEffect(\"cold1\")\n}\n\n","TxfmxDGBj04AQQpt":"let weapon = args.opposedTest.defenderTest.weapon\nif (\n !args.opposedTest.result.swapped && \n args.opposedTest.result.winner == \"defender\" && \n args.opposedTest.attackerTest.result.damage && \n weapon && \n weapon?.system.properties.qualities.fast\n )\n{\n args.opposedTest.swap(this.effect.label);\n}","TzgmYRXFXRspIo1i":"this.effect.delete();","U1RUcgP8LD2qeGTm":"return !args.options.reload","U1UpSRJOSjPpO4HS":"let mutations = await game.wfrp4e.utility.findAll(\"mutation\", \"Loading Mutations\")\nlet roll = Math.floor(CONFIG.Dice.randomUniform() * mutations.length);\nthis.actor.createEmbeddedDocuments(\"Item\", [mutations[roll]]);\nthis.script.scriptNotification(`Added ${mutations[roll].name}`)","U26XMie3Kjoddisj":"let stunned = this.actor.hasCondition(\"stunned\")\nif (stunned)\n{\n this.script.scriptNotification(`Cleared 1 Stunned Condition`)\n this.actor.removeCondition(\"stunned\");\n}\nelse \n{\n\tthis.script.scriptNotification(`No Stunned Conditions`)\n}","U2xKn7R1gm8kiQm8":"this.actor.hasCondition(\"broken\")?.delete();\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","U4A8FDNmwBGTuQZO":"if (args.attacker.has(\"Undead\") && !args.attacker.has(\"Ethereal\"))\n{\n args.totalWoundLoss = Math.floor(args.totalWoundLoss / 2)\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\n}","U5ndCwcJ1s3Ns26w":"args.item.system.qualities.value.push({name : \"magical\"});\nargs.item.system.damage.value += ` + ${parseInt(this.effect.sourceTest.result.SL)}`;\nargs.item.name += ` (${this.effect.name})`","U78c4oUjKwyUu6jT":"return (args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.characteristic != \"fel\")","U9xh2wriSqCosugW":"if (args.test.options.stag)\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalSuccess\");\n\t\t}\n\t\targs.test.result.outcome = \"success\"\n args.test.result.other.push(`${this.effect.name}: Minimum +0 SL`)\n\t}\n}","UC6G3pFQwzUhrw6F":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\");","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData());\n args.totalWoundLoss += roll.total;\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n}","ULmZMLezDamerN04":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\")\n\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\nthis.script.scriptNotification(lore)\nif (lore == \"GM's Choice\") {\n return\n}\n\nelse if (lore == \"Arcane Magic\") {\n lore = \"Arcane\"\n}\n\nelse if (lore == \"Petty Magic\") {\n lore = \"petty\"\n}\n\nelse {\n lore = lore.toLowerCase();\n}\n\nlet spellsWithLore = []\nif (lore == \"Arcane\") {\n spellsWithLore = spells.filter(i => !i.system.lore.value)\n}\nelse {\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\n}\n\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\n this.actor.setupCast(item).then(test => test.roll());\n})","UTlgF4azrGQZsoDv":"const talents = await Promise.all([\"Ambidextrous\", \"Distract\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","UWrzokgabRKUpnkG":"return [\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","UYLXm2W6jVn21Age":"args.fields.modifier += 40;","UaImulhbPURkLJg2":"return this.actor.attacker && (args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\n\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n {\n type : \"armour\",\n name : \"Leather Leggings\"\n },\n {\n type : \"armour\",\n name : \"Leather Skullcap\"\n },\n {\n type : \"armour\",\n name : \"Leather Jack\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plate Breastplate\"\n },\n {\n type : \"armour\",\n name : \"Plate Bracers\"\n },\n {\n type : \"armour\",\n name : \"Plate Helm\"\n },\n {\n type : \"armour\",\n name : \"Plate Leggings\"\n },\n]\n\nlet choice = await Dialog.wait({\n title : \"Choice\",\n content : \n `

\n Select your choice\n

\n
    \n
  1. Mail
  2. \n
  3. Mail & Leather
  4. \n
  5. Plate
  6. \n
\n `,\n buttons : {\n 1 : {\n label : \"Mail\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Mail & Leather\",\n callback : () => {\n return choice2\n }\n },\n 3 : {\n label : \"Plate\",\n callback : () => {\n return choice3\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","UsAHQecRlWL5PhP6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.corruptionDialog(\"moderate\") \n }\n})","UsuwsmU1TUQLQVM2":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\nreturn !args.spell || (args.type == \"cast\" && [\"petty\", lore].includes(args.spell.system.lore.value));","UvycHOjSPm5Zv9KJ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nlet baseDamage = \"4\";\nif (test.succeeded)\n baseDamage = \"0\";\n \nlet damage = this.effect.sourceItem.system.computeSpellDamage(baseDamage, true) + parseInt(this.effect.sourceTest.result.SL);\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg : true}))\nthis.actor.addCondition(\"ablaze\")","UwjkHRAQHESdYXJs":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}}));","Ux4buMc7llF1Kg8p":"if (!this.actor.hasCondition(\"stunned\") && !this.actor.hasCondition(\"unconcscious\"))\n{\n this.effect.delete();\n}","V1D2Uo3WDKYQePU3":"let damage = this.effect.sourceTest.result.damage;\n \nlet loc = \"head\"\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\nthis.script.scriptMessage(msg)\n","V2lsVTi6q28eL5jl":"args.fields.slBonus += parseInt(this.effect.sourceTest.result.SL)","V7qmFwUMCY2tfziH":"this.actor.addCondition(\"stunned\")","V9wD9FWHWxZUOGSI":"let roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nlet fatigued = roll.total\nroll.toMessage(this.script.getChatData());\nif (fatigued > this.actor.characteristics.wp.bonus)\n{\n this.actor.addCondition(\"unconscious\")\n this.script.scriptNotification(`Fell Unconscious`)\n}\nelse \n{\n fatigued = Math.max(0, fatigued)\n if (fatigued)\n this.actor.addCondition(\"fatigued\", fatigued)\n this.script.scriptNotification(`Gained ${fatigued} conditions`)\n}","V9xm4X1x3lPYTQaI":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.scriptNotification(\"Immune to Fear\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}","V9zm2hKUVLVZtAcN":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 15,\n \"i\" : 15,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charm\", \"Channelling\", \"Entertain (Prophecy)\", \"Intuition\"]\nlet skillAdvancements = [0, 0, 20, 10]\nlet talents = [\"Detect Artefact\", \"Menacing\", \"Sixth Sense\"]\nlet traits = [\"Dooming\", \"Spellcaster (Lore of Life)\", \"Ward\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Forest of Thorns\"];\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'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(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","VAPsww9x3HAw1sKP":"return !args.options.dodge","VAs1nXvicdQK18Do":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","VNOKTzCrFbZ6PJUj":"return ![\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\n\nawait roll.toMessage(this.script.getChatData());\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\nawait test.roll();\n\nif (test.succeeded)\n{\n return false;\n}","Vb7rgl8T4VRswbnZ":"this.actor.status.addArmour(parseInt(this.item.system.specification.value) || 0, {source: this.effect, damage : this.item.getFlag(\"wfrp4e\", \"APdamage\")})","VbL0TgaBAmYjrezZ":"const talents = await Promise.all([\"Hardy\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Language (Magick)\"","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"fatigued\") \n }\n})","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\n{\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\n\t{\n\t\tif (parseInt(args.test.result.SL) > 0)\n\t\t{\n\t\t\targs.test.result.SL = \"-0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\n\t\t}\n\t\targs.test.result.outcome = \"failure\"\n args.test.result.other.push(`${this.effect.name}: Maximum -0 SL`)\n\t}\n}","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \n\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Added Bleeding\")\n}","WB6sIpLEPC8YPX67":"if (args.options.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\n{\n args.item.system.qualities.value.push({name : \"magical\"})\n}","WO5n7Vbx8AgoVrwC":" let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\n let skillAdvancements = [10, 10, 10]\n let talents = []\n let trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\"]\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (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 \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(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\n{\n\tthis.actor.addCondition(\"dead\");\n}","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\n // must make a Challenging (+0) Endurance Test \n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\n fields: {difficulty: \"challenging\"}\n })\n \n await test.roll();\n if (test.failed)\n {\n // or gain a Deafened Condition \n this.actor.addCondition(\"deafened\");\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\n let damage = (await new Roll(\"1d10\").roll());\n await damage.toMessage(this.script.getChatData());\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n }","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 3\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\nthis.actor.status.encumbrance.pct = 100;","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}\n\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","XO9m2AvFRAAeEuty":"if (args.test.options.fieldDressing && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`${this.effect.name}: SL limited to 1`)\n}","XPxAKqPpPYE4E6B5":"args.fields.modifier -= 10 * this.effect.conditionValue","XRrGBbplNLZpXnCH":"let item;\nlet items = []\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\n{\n let data = item.toObject();\n data.system.specification.value = 2\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.mDgEMOoJpi8DkRYb\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\n{\n let data = item.toObject();\n data.system.specification.value = 2;\n items.push(data)\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","XXnzUdsIYQ9Wjyu0":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale || this.actor.sameSideAs(this.effect.sourceActor)","XYaYeiVkc5GKYTjC":"return args.spell?.system.lore.value != \"fire\"","XcvDYNZgJ2rpAdDV":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Fatigued added to \" + this.actor.name + \" which cannot be removed until the Malaise symptom is gone.\")\n }","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\n{\n args.addImpact = true;\n args.opposedTest.result.other.push(\"Impact against Skaven\")\n}","Xf4FcZ4ZLdWmOXBa":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","Xk9XPklxxTvFlwpI":"args.options.useOnesArgumentative = true;","XthZ3GCC3WhsEI2g":"args.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n}});","Xu5cED1MhT4ba7da":"args.fields.modifier += 10\n","XuFxKPYheYF4WMmQ":"return args.skill?.name != game.i18n.localize(\"NAME.Cool\");","Y6ppJBerpM3TtSic":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.g4Q6AtzZuo5iIvD4\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","Y7McxsHFeGhwQx0J":"this.actor.createEmbeddedDocuments(\"Item\", [expandObject({\n name : \"Ghostly Flame\",\n type : \"weapon\",\n img : this.effect.img,\n system : {\n \"weaponGroup.value\" : \"throwing\",\n \"damage.value\" : \"SB + WPB\",\n \"qualities.value\" : [{name : \"magical\"}],\n \"equipped\" : true\n }\n})], {fromEffect: this.effect.id})","Y8J66v8VTKUASGuK":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\n\nif (choice[0])\n{\n\tawait this.actor.removeCondition(choice[0].conditionId)\n}\n\nif (this.actor.effects.find(e => e.isCondition))\n{\n return false; // Delete the effect if there are still conditions, otherwise, effect remains and provides the bonus\n}","YDqpKJVy8ijEKdLX":"return !(this.actor.attacker && (args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\")))","YEBw2CzHYxsTpTy5":"return args.skill?.name == game.i18n.localize(\"NAME.Haggle\");","YFSgWRXel0bWE3EE":"return [\"ag\", \"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name == game.i18n.localize(\"NAME.Climb\");","YHEIkBKWXKNPqglh":"if (args.test.result.castOutcome == \"success\")\n{\n game.wfrp4e.utility.postCorruptionTest(\"moderate\", this.script.getChatData())\n}\n","YMaxpXnml01bLGpO":"return args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\n args.test?.result?.other.push(\"Gain additional +1 Corruption from \" + this.effect.name)\n}","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\nthis.script.scriptNotification(\"Added Fatigued\")","YaKnYEbmmZZtByJc":"if (args.opposedTest.attackerTest.options.ballockKnife)\n{\n args.weaponProperties.impale = true;\n args.extraMessages.push(`${this.item.name}: Impale Added`)\n}","Yf2MmOzazzMdmoPU":"let armour = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\nlet armourData = armour.toObject()\narmourData.system.specification.value = 1\n \nlet fury = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet furyData = fury.toObject();\n\nlet horns = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet hornsData = horns.toObject()\nhornsData.system.specification.value = 6\n\nthis.actor.createEmbeddedDocuments(\"Item\", [armourData, furyData, hornsData], {fromEffect : this.effect.id})","YhhiWEQbox3WZA3Q":"return args.skill?.name == game.i18n.localize(\"NAME.Heal\") && game.combat?.active","YjAIsFlxKTJvYs60":"this.item.system.reduceQuantity();","YjJcRdytVRm88qLn":"args.options.additionalDamage = 1","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\nlet fel_gain = 0\nif (args.actor.characteristics.fel.value <= 0)\n{\n fel_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\n\nif (fel_gain)\n msg += ` and ${fel_gain} Fellowship`\n\n\nlet newInt = i_gain + args.actor.characteristics.int.modifier\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\n\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\n\nthis.script.scriptMessage(msg)","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\n\nif (newEffect)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\n}","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nitem = item.toObject()\nitem.name = this.effect.name\nitem.system.specification.value = this.actor.characteristics.s.bonus\nitem.system.description.value = \"\"\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\nif (ablaze)\n{\n this.script.scriptNotification(\"Immune to Ablaze\");\n ablaze.delete()\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll();\nlet regen = regenRoll.total;\n\nif (wounds.value >= wounds.max)\n return\n\nif (wounds.value > 0) \n{\n wounds.value += regen\n if (wounds.value > wounds.max)\n {\n wounds.value = wounds.max\n }\n message += `${this.actor.name} regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `${this.actor.name} rolled a ${regen} and regains 1 Wound.`\n wounds.value += 1\n if (regen == 10)\n {\n message += `
Additionally, they regenerate a Critical Wound.`\n }\n}\nelse \n{\n message += `${this.actor.name} Regenerate roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": wounds })\nthis.script.scriptMessage(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n\nif (this.actor.Species?.toLowerCase() != \"ogre\")\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}}).then(test => {\n test.roll()\n })\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","Z6jNlyZMECkW4Hon":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\", true);\n\nlet choice = await ItemDialog.create(spells, 1);\n\nif (choice[0])\n{\n this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\n spell.system.wind.value = \"Channelling (Dhar)\";\n spell.system.memorized.value = true;\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\n}","ZCkYe5XMVY1RWMXG":"args.options.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effect because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await Dialog.confirm({title : this.effect.name, content : \"Halve Damage? (Halves Damage from all fire)\"})\n}\nelse\n{\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\n\nswitch (initiativeSetting) {\n case \"default\":\n args.initiative += \"+10\"\n break;\n\n case \"sl\":\n args.initiative += \"+1\"\n break;\n\n case \"d10Init\":\n args.initiative += \"+10\"\n break;\n\n case \"d10InitAgi\":\n args.initiative += \"+1\"\n break;\n}","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet biteData = bite.toObject();\nlet infectedData = infected.toObject();\n\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\n\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\ndata.system.specification.value = \"Religion\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","ZMwJad6v4G13SgjR":"return args.type == \"cast\" || args.type == \"channelling\"","ZNW3ubbKIYXAyE48":"let wounds = this.actor.itemTypes.disease.filter(i => i.name == \"Festering Wound\" && i.system.duration.active);\nlet selected;\nif (wounds.length == 0)\n{\n return this.script.scriptNotification(\"No Festering Wounds!\");\n}\nelse if (wounds.length == 1)\n{\n selected = wounds[0];\n}\nelse if (wounds.length >= 2)\n{\n selected = (await ItemDialog.create(wounds, 1))[0];\n}\n\nif (selected)\n{\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}})\n await test.roll();\n if (test.succeeded)\n {\n let SL = parseInt(test.result.SL);\n if (SL >= 0)\n {\n selected.update({\"system.duration.value\" : selected.system.duration.value - SL})\n this.script.scriptMessage(`${selected.name} duration reduced by ${SL}!`)\n }\n }\n}","ZNu4B0OdjkM9lmtu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Vision)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\n{\n // Wait till after chat card is posted\n game.wfrp4e.utility.sleep(500).then(() => {\n game.wfrp4e.utility.postTerror(1, this.effect.name)\n game.wfrp4e.utility.postTerror(2, this.effect.name)\n })\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \n// in Wolves, Lions, Goats, and Chimeras.\ngame.wfrp4e.utility.postFear(2, this.effect.name)\n","ZbuW8y7t9Y8oUFWq":"return !((args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\"))","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZqTW093qENOwGONP":"let msg = \"\"\n\nlet SL = parseInt(this.effect.sourceTest.result.SL);\n\nfor(let i = 0; i < SL; i++)\n{\n msg += `

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

`\n}\n\nthis.script.scriptMessage(msg);","ZrePyV2spv3v65Tg":"return args.type != \"weapon\" && !this.actor.statuses.has(\"infighting\")","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nreturn test.failed","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = 0\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","a02tlRCXpaoaDjSN":"let careers = await game.wfrp4e.utility.findAll(\"career\", \"\", true);\ncareers.forEach(c => {\n if (!c.id)\n {\n c.id = c._id;\n }\n});\nlet choice = await ItemDialog.create(careers, 1, \"Choisissez la carrière de votre double identité\");\nif (choice[0])\n{\n let career = await fromUuid(choice[0].uuid);\n let data = career.toObject();\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\n}\n","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.addCondition(\"fatigued\");\n}","a4Aza4a9v8JMU8dC":"const talents = await Promise.all([\"Frénésie\", \"Résistance à la Magie\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","a6gacHsvgwtsIFSQ":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.Research\"))\n args.test.preData.canReverse = true","a7pEvCycVnFBXGAQ":"let test = await this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - Assomé\", fields : {difficulty : \"easy\"}})\nawait test.roll();\n\nif (!test.succeeded)\n{\n\tthis.actor.addCondition(\"stunned\");\n}","a8RabrnJ08O07rDX":"if (args.totalWoundLoss > 0)\n{\n // I'm assuming the endurance test specified is for the end-round check\n await args.actor.addCondition(\"poisoned\", 2);\n}","a8i0sA1RBnD8nHZt":"let caster = this.effect.sourceActor\nlet targetedItem = this.actor.items.get(this.effect.flags.wfrp4e.itemTargets[0])\n\nlet qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities);\nlet flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws);\n\nif (targetedItem.type == \"weapon\")\n{\n mergeObject(qualities, game.wfrp4e.config.weaponQualities)\n mergeObject(flaws, game.wfrp4e.config.weaponFlaws)\n}\nelse if (targetedItem.type == \"armour\")\n{\n mergeObject(qualities, game.wfrp4e.config.armorQualities)\n mergeObject(flaws, game.wfrp4e.config.armorFlaws)\n}\n\nfor(let q in qualities)\n{\n // If the weapon already has a flaw, don't put it in the dialog\n if (targetedItem.system.properties.qualities[q])\n {\n delete qualities[q]\n }\n}\nfor(let f in flaws)\n{\n // If a weapon doesn't have a flaw, don't put it in the dialog\n if (!targetedItem.system.properties.flaws[f])\n {\n delete flaws[f]\n }\n}\n \nlet added = await ItemDialog.create(ItemDialog.objectToArray(qualities), \"unlimited\", \"Choisissez la Qualité à ajouter\");\nlet removed = []\nif (!foundry.utils.isEmpty(flaws))\n{\n removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), \"unlimited\", \"Choisissez le Défaut à enlever\");\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.propertiesChanged\" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}})\n","aAvJrAKLzXhS9qN6":"return args.item?.name == game.i18n.localize(\"NAME.Climb\")","aCVtaW8ag1WibcAr":"args.attacker.modifyWounds(1)\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} récupère 1 Blessure.`)","aIYUsBIDKWJ3CEtj":"this.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));","aMHGjWyn6BXCI4pw":"let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.hXcfygzujgyMN1uI\");\nthis.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect: this.effect.id})","abLWYtNTu1UVDQAs":"if (args.opposedTest.result.hitloc.value == this.effect.flags.wfrp4e.location) // e.g. 'head', rLeg, 'lArm'\n{\n this.scriptMessage(`Reçoit l'état @Condition[Aveuglé] comme ${this.item.name} a été touché`);\n this.actor.addCondition(\"blinded\");\n}","abVIvJBzuskNzCQv":"let amount = this.effect.sourceTest.result.overcast.usage.other.current;\n\nlet sss = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet strider = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\n\nlet items = Array(amount).fill(sss).concat(Array(amount).fill(strider))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","afdmOvPGMpEdZvCb":"return (args.skill?.name == game.i18n.localize(\"NAME.Perception\") || args.characteristic == \"fel\")","agsm3NI1NDtHRG4y":"this.actor.getActiveTokens().forEach(t => t.document.update({texture : this.actor.prototypeToken.texture}, {animate : false}));","ahbA7o5G9dzMFl76":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","alJgj25l3239h2SW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hTgrGkWnmIR4xhVe\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ayIbw2Vw2t9xg33P":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","b1zMefdoZYtzCm7i":"return [\"roll\", \"none\"].includes(args.fields.hitLocation) || args.item?.attackType != \"ranged\"","b2Kb4IuD22RhKhR0":"let actor = Array.from(game.user.targets)[0]?.actor;\n\nif (actor)\n{\n actor.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[0].uuid})\n}\nelse\n{\n this.script.scriptNotification(\"Aucune cible!\", \"error\")\n}","b2WaqRna5CFXmbDG":"args.options.stag = true;","b5DfAWtpV1x2R8If":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","b5prg1FLjCAvBjLy":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.zyocWSzEZEC826NS\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n await this.actor.addCondition(\"prone\")\n await this.actor.addCondition(\"stunned\")\n}","bBdXzBmxgFFBwMMS":"if(args.opposedTest.attackerTest.item?.isRanged && args.applyAP && !args.sureShot)\n{\n if (args.modifiers.ap.value)\n {\n args.sureShot = true;\n args.modifiers.ap.details.push(`${this.effect.name} (Ignore ${this.item.Advances})`)\n args.modifiers.ap.ignored += this.item.Advances;\n }\n}","bEVlJOOA1kLlzpWx":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Channelling\", \"Cool\", \"Dodge\", \"Entertain (Storytelling)\", \"Intuition\", \"Language (Magick)\", \"Leadership\", \"Lore (Magic)\", \"Lore (Theology)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\nlet talents = [\"Aethyric Attunement\", \"Arcane Magic\", \"Instinctive Diction\", \"Instinctive Diction\", \"Luck\", \"Magical Sense\", \"Menacing\", \"Petty Magic\", \"Second Sight\", \"Sixth Sense\"]\nlet trappings = [\"Hand Weapon\", \"Quarterstaff\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","bLkt8VpTTPoTxW0W":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Ajout d'Hémorragie\")\n}\n","bMEFHPCei2evnZZw":"// Victims that take at least 1 Wound from a Fell Dagger\n// immediately take a Poisoned Condition \n// resisted with a Difficult (-10) Endurance Test. \n\n// TODO: Add Venom strength to message\n\nif (args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"poisoned\")\n this.script.scriptMessage(`\n ${this.effect.name}:
\n ${args.actor.name} reçoit un état @Condition[Empoisonné], qui peut être résisté avec un Test de Résistance Difficile (-10).`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","bQyVajMN1ETwlzvM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\nlet target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n data.system.specification.value = target.result\n this.script.scriptNotification(target.result);\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bRtZH0xRh8dgqMeW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bWr8leucbWslBCYG":"return args.characteristic != \"s\"","bhXUW7IJtEaUGAoV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll(); \nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}\n ","brNRqfpPqD2Ki0cM":"args.prefillModifiers.modifier -= 10","btPrQkGRKUkhNe3N":"return args.skill?.name == \"Métier (Apothicaire)\"","bwtQOSWn120NICkf":"let test = await this.actor.setupCharacteristic(\"ag\", {fields : {difficulty : \"hard\"}});\nawait test.roll();\n\nif (test.failed)\n{\n await this.actor.addCondition(\"bleeding\")\n await this.actor.addCondition(\"entangled\")\n}","bwx9wuEOJPF7btD1":"return args.skill?.name != game.i18n.localize(\"NAME.Navigation\");","bzaoWcieMFaU5B5l":"return !this.actor.flags.useless[this.item.system.location.key] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","c31hjp7k0hlpdGBC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","c3KA1knL2NYNUEww":"return args.skill?.name != game.i18n.localize(\"NAME.Evaluate\");","cAioHYtlxuOCwRLh":"let ablaze = Number(args.opposedTest.attackerTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","cApfxL7Ic0NKdoSr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cBSy9CR5NZvcLRg8":"\n args.prefillModifiers.modifier += 0;\n args.prefillModifiers.slBonus += 0;\n args.prefillModifiers.successBonus += 0;\n ","cDBhmHn5kjgWBAlT":"let num = (this.effect.sourceTest.result.overcast.usage.other.current || 1)\n\nthis.actor.addCondition(\"entangled\", num)","cEg09bnvZD6Ysnpc":"let item = await fromUuid(\"Compendium.wfrp4e-archives2.items.anIlqJXFOIEzIOo1\")\nlet data = item.toObject();\ndata.name = this.item.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cJFDnq1HI4gXWcJo":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create(\"Ward Value\", \"Enter the Ward value\");\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\n{\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\n\tif (args.wardRoll >= args.ward && args.ward > 3)\n {\n let newWard = Math.max(3, args.ward - 1)\n this.script.scriptMessage(\"Protection améliorée de \" + newWard)\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\n }\n\n}","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\n\nthis.actor.system.characteristics.s.modifier += sl * 10;\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\nlet data = item.toObject();\n\nif (this.item.name.includes(\"(\"))\n{\n\tgroup = this.item.parenthesesText\n}\n\nelse \n{\n\tgroup = await ValueDialog.create(\"Choisir le groupe haï\", \"Groupe Haï\")\n\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(\"Target\", group);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cV9JiAgUPOeUHKnS":"args.fields.successBonus++;\nif (args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\"))\n{\n args.fields.modifier += 10;\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\n{\n args.item.cn.value -=2\n if (args.item.cn.value < 0)\n args.item.cn.value = 0\n}","cgmA2N0MkjA7qIZy":"return args.type != \"cast\" || args.item?.system.lore?.value != \"shadow\"","ch5SD2XOQfcYo0X5":"if (args.sizeDiff <= -2 && args.opposedTest.attackerTest.result.critical)\n args.damageMultiplier = Math.abs(args.sizeDiff)\n\n let sBonusDiff = args.opposedTest.defenderTest.actor.characteristics.t.bonus - args.opposedTest.attackerTest.actor.characteristics.s.bonus\n let weapon = args.opposedTest.attackerTest.item\n if (sBonusDiff > 0 && weapon && weapon.damage.value.includes(\"SB\"))\n {\n args.damage += sBonusDiff\n args.breakdown.other.push({label : this.effect.name, value : sBonusDiff});\n }","chUpiI3el8IO8MSs":"if (args.opposedTest.attackerTest.item?.name.includes(\"Morsure\"))\n{\n let woundsGained = args.totalWoundLoss;\n this.script.scriptMessage(`Récupère ${woundsGained} Blessures`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n this.actor.modifyWounds(woundsGained)\n}","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\nthis.actor.characteristics.i.bonus = 1;\n\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\n{\n skill.system.total.value= Math.min(skill.system.total.value, 10)\n}","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dAMtbn3uQwF8KpKU":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\");","dIxYt421K010eogY":"\n let modifier = 0\n if (this.effect.name.includes(\"Modéré\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n args.abort = \"Raté - Sans tête\"\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Ribs\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\n\nawait test.roll();\n\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"fatigued\");\n await this.actor.addCondition(\"broken\");\n}","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\n}","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\n\nsense.name += \" (Vue)\";\nsense.system.tests.value = sense.system.tests.value.replace(\"Sens\", \"Vue\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\n}","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\n\nthis.actor.update({\"system.status.fate.value\" : current + 1})\n\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses Points de Destin augmentés de ${current} à ${current + 1}`)","dfEgat3jz4EtWszH":"return args.skill?.name == \"Discrétion (Urbaine)\"","dfnCK8jCPXNLM7Gh":"let aoeDamage = this.effect.sourceTest.result.damage - 5 // Easily handle magic missile damage by just subtracting 5 from the item's (which has +10 base)\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - Ablaze`})\n\nawait test.roll();\n\nif (!test.succeeded)\n{\n this.actor.addCondition(\"ablaze\");\n}","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.ag.value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\n\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\n{\n return\n}\n\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\n args.fields.slBonus += 2;\nelse\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Corps à corps (Base)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Corps à corps (Bagarre)\" && args.item?.weaponGroup?.value != \"brawling\"","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\n\nawait args.actor.addCondition(\"ablaze\", 2);\nawait args.actor.addCondition(\"prone\");","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n args.test.result.other.push(`${this.effect.name}: L'opposant perd ${Number(args.test.result.SL) + 1} Avantage`)\n}","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n this.script.scriptMessage(`${this.actor.prototypeToken.name} subit une @Table[crithead]{Blessure Critique} si il n'y en avait pas d'autres.`)\n}","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value || 1)","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","ePPgxQOqL1Uhz2k9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Projectiles (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Arc\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche\",\n }\n]\nlet choice2 = [\n]\n\nlet choice = await Dialog.wait({\n title : \"Option\",\n content : \n `

\n Ajouter une Option?\n

\n
    \n
  1. Projectiles (Arc) +10 et un arc avec 12 Flèches
  2. \n
\n `,\n buttons : {\n 1 : {\n label : \"Oui\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Non\",\n callback : () => {\n choice2\n }\n }\n }\n })\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","eWWLmA2xINR321aK":"args.item.system.qualities.value.push({name : \"magical\"})","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (this.item.system.location.key == \"rArm\")\n{\n\tdata.system.location.value = \"Main Droite\"\n\tdata.system.location.key = \"rHand\"\n}\nelse if (this.item.system.location.key == \"lArm\")\n{\n\tdata.system.location.value = \"Main Gauche\"\n\tdata.system.location.key = \"lHand\"\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Céder ou Mourir!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.script.scriptNotification(\"Ajout de \" + data.name);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\nif (trait && trait.name.includes(\"Morsure\") && woundLossEffect)\n{\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\n}","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\nlet data = item.toObject();\ndata.name += \" (Ennemi)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\nuses++;\nthis.script.scriptNotification(`Utilisé ${uses} fois`)\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\n\tthis.script.scriptNotification(`Utilisé`);\n}\n","eqxE7nBO13yJS7hc":"let roll = (await new Roll(\"1d10\").roll())\nroll.toMessage({flavor: \" Blessures soignées\", speaker : {alias : this.actor.name}})\n\nthis.actor.modifyWounds(roll.total)\n\nthis.actor.hasCondition(\"bleeding\")?.delete();","esuLwq4g5T8k1kLT":"await args.actor.addCondition(\"ablaze\"); await args.actor.addCondition(\"prone\");","ezGqDoC9hNRBnFTB":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"1zaqojk0Oq1m8vYv\"), game.wfrp4e.utility.findItemId(\"zIuarD5mB0EF0ji0\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une arme\")\n items = items.map(i => i.toObject())\n \n items.forEach(i => equip(i))\n \n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.data.worn.value = true\n else if (item.type == \"weapon\")\n item.data.equipped = true\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\n item.data.worn = true\n }","f062aa2BNClx08D6":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed) \n {\n let toughnessLost = parseInt(this.effect.sourceTest.result.SL)\n\n let currentModifier = this.actor.characteristics.t.modifier\n\n await this.actor.update({ \"system.characteristics.t.modifier\": currentModifier - toughnessLost })\n this.script.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`)\n if (this.actor.system.characteristics.t.value <= 0)\n {\n this.actor.addCondition(\"dead\");\n }\n\n }","f3rXusHh6VIpVPUl":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) && args.type != \"cast\"","f4vvAGQ8OGoEbrgy":"let SL = args.opposedTest.attackerTest.result.SL - args.opposedTest.attackerTest.item.cn.value\nlet difficulty = \"challenging\"\nif (SL >= 1)\n difficulty = \"difficult\"\nif (SL >= 2)\n difficulty = \"hard\"\nif (SL >= 3)\n difficulty = \"vhard\"\n \n\nlet test = await args.actor.setupCharacteristic(\"wp\", {fields: {difficulty}, skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain a Stunned Condition\"}})\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"stunned\");\n}","f5Mp3kXwCFdPkW6N":"return args.skill?.name != \"Entertain (Sing)\" && args.skill?.name != \"Entertain (Singing)\" && !args.skill?.name.includes(\"Language\");","f6WnrJvoNkfoNN9Y":"return args.item?.attackType != 'melee'","f7WZvYle9iqefRsh":"return args.weapon?.system?.attackType != \"melee\"","f8cnfvGKJH3bYVGN":"return [\"s\", \"t\"].includes(args.characteristic)","fEFfHFeJxkR0aIJK":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 3 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.scriptMessage(`Everyone within 20 feet loses 1 Wound and makes a Difficult (-10) Endurance or gains @Condition[Deafened]`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n ","fEyKQqCjDwml3DXO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","fFGuTi0HLjwneMcJ":"return args.item?.system.isRanged","fIUxKZMWJ8HMPmH9":"return [\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","fKzlu6fFE2th9uIJ":"return args.item?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\")","fP2edYbj6QjPPAjL":"return [\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","fPKYkBllp7Et62lX":"if (args.test.spell.name == \"Warp Lightning\")\n{\n args.test.preData.canReverse = true;\n}","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":" let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = [\"Consume Alcohol\", \"Row\", \"Sail\", \"Swim\"]\n let skillAdvancements = [10, 10, 10, 10]\n let talents = []\n let trappings = []\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (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 \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(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","faRFSsrQylQRZFLk":"return args.bleedingHand || !args.weapon || !this.actor.hasCondition(\"bleeding\")","fcY3pa72dELnOFXV":"return !args.options.reload\n","feMPZhhFeXRtKdKY":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectUuids : this.item.effects.contents[0]?.uuid})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","ffvcCEazZBinHlUX":"args.update({texture : {tint : \"#FFD700\"}});\n","fiF9sM5UpcHMYa33":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += \" (Poison, Disease, Chaos)\"\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect: this.effect.id})","fkFmNcesqqNTMhVn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.2iult41Jehz0F1O8\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","fl762icfKrt9ear2":"this.actor.removeCondition(\"broken\", parseInt(this.effect.sourceTest.result.SL)+1)","ft0LaRWZT5WtnptP":"let advantage = this.actor.system.status.advantage.value;\nif (advantage > 0)\n{\n await this.actor.setAdvantage(0);\n this.script.scriptNotification(\"Advantage Subtracted\")\n}\nelse \n{\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item, {fields : {slBonus : advantage}})\nawait test.roll();","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\nawait roll.toMessage(this.script.getChatData());\nthis.script.scriptNotification(`Healed ${roll.total} Wounds`)\nthis.actor.corruptionDialog(\"moderate\")\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\nawait test.roll()\n// If they fail, they acquire 2 Poisoned Conditions. \nif (test.failed) \n{\n this.actor.addCondition(\"poisoned\", 2)\n this.script.scriptMessage(`

${this.actor.prototypeToken.name} has gained 2 @Condition[Poisoned] Conditions.

\n

Any being with the Bestial Creature Trait that bites them and takes damage will not bite them again during a hostile encounter, though the creature may still attack them in other ways.

`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n })\n}\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\nelse if (test.succeeded) \n{\n // Don't attempt to add Corrosive Blood if actor already has it\n const hasCorrosiveBlood = this.actor.has(\"Corrosive Blood\")\n if (hasCorrosiveBlood !== undefined) return \n\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n const duration = 3 + parseInt(test.result.SL)\n this.script.scriptMessage(`

${this.actor.prototypeToken.name} gains the Corrosive Blood Trait for ${duration} rounds.

`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}","g0SzfsLyW7aD2F19":"if (this.item.name.includes(\"(\") && this.item.system.tests.value.includes(\"(Social Group)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let group = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\n }\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \n// of the target point is splashed with mystic poison, \n// suffering 1d10 + SL damage which ignores Armour Points\n\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\n\nawait damage.toMessage(this.script.getChatData())\n\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\n damage.total,\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\n))\n\n// ... and gains the Poisoned Condition\n\nthis.actor.addCondition(\"poisoned\")","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\n amberTalons.name = \"Amber Talons\";\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 label : \"Amber Talons\",\n transfer: false,\n icon : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\n flags : {\n wfrp4e : {\n applicationData : {\n documentType : \"Item\"\n },\n scriptData : [{\n trigger : \"applyDamage\",\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\n }]\n }\n }\n })\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\n await test.roll();\n if (test.failed)\n this.actor.addCondition(\"fatigued\") \n })\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\n{\n e.update({disabled: false})\n}\nthis.script.scriptNotification(\"Reset Powers\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Stealth (Underground)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\n args.test.preData.canReverse = true","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\n","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\n{\n \n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\n args.actor.addCondition(\"ablaze\")","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\n{\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\n}","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","gqZLfIr6svrtdwdC":"return args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\") && args.skill?.name != game.i18n.localize(\"NAME.MeleeBrawling\") && args.weapon?.system?.weaponGroup?.value != \"brawling\"","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","h766UvswLCsxcMow":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : -15,\n \"t\" : 0,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 5,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\nlet skillAdvancements = [7, 60, 7]\nlet talents = [\"Menacing\", \"Shadow\"]\nlet traits = [\"Distracting\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'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(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\nthis.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\n\nwoundsGained = Math.floor(woundsGained / 2)\n\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\n\nthis.script.scriptMessage(`Gains ${woundsGained} Wounds`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n this.script.scriptMessage(`Fumble: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","hObTbWi4ZdwXimIW":"if (args.item.type == \"spell\")\n{\n args.item.system.cn.value = Math.floor(args.item.system.cn.value / 2);\n}","hR1qD2kpFHF8JT8h":"return args.skill?.name == \"Language (Magick)\"","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = [\"Cool\", \"Dodge\"]\n let skillAdvancements = [10, 10]\n let talents = [\"Combat Reflexes\"]\n let trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (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 \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(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.
`\n if (this.actor.status.wounds.value <= 1)\n {\n msg += `${this.actor.prototypeToken.name} goes unconscious.
`\n await this.actor.addCondition(\"unconscious\")\n }\n this.script.scriptMessage(msg)\n this.actor.modifyWounds(-1)","hnsmzvcuiUYB065I":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, context: { failure : \"May not flee Combat\"}}).then(test => test.roll())","hpwJRAhCsXTp9bd9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Melee (Basic)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Melee (Polearm)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"skill\",\n name : \"Melee (Two-Handed)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice = await Dialog.wait({\n title : \"Choice\",\n content : \n `

\n Select your choice\n

\n
    \n
  1. Melee (Basic)
  2. \n
  3. Melee (Polearm)
  4. \n
  5. Melee (Two-Handed)
  6. \n
\n `,\n buttons : {\n 1 : {\n label : \"Basic\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Polearm\",\n callback : () => {\n return choice2\n }\n },\n 3 : {\n label : \"Two-Handed\",\n callback : () => {\n return choice3\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Duration)\n if (Number.isNumeric(range))\n {\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\n }\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n let damage = this.effect.sourceTest.result.damage\n\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.s.bonus\ndata.system.description.value = \"\"\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\n{\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\n}","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\n\nthis.script.scriptMessage(`this.actor.prototypeToken.name healed ${healed} Wounds`);\n\nthis.actor.modifyWounds(healed)","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.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.scriptMessage(`Loses access to ${chosen.name}`)\n chosen.update({name : chosen.name += \" (LOST)\"})\n }\n}\n\n\n","iT0h3VZLEBQnn5Bx":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\") && args.skill?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\");","iT3C15fMyQrj1RmG":"if (this.actor.has(\"Undead\") && this.actor.has(\"Ethereal\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if(test.failed)\n this.actor.addCondition(\"stunned\")\n })\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\n\nif (result.object.documentId && result.object.documentCollection)\n{\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\n if (item)\n { \n let data = item.toObject();\n // Some items need sourceTest for their effects\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\n }\n}\n\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.scriptNotification(\"Immune to Fear\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\n// or the state of being Stinking Drunk are eliminated. \nawait this.actor.removeSystemEffect(\"consumealcohol1\")\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\n\n// The drinker is thereafter Fatigued \n// for a number of hours equal to 10 minus their Toughness Bonus — \n// nothing but time and rest can eliminate this penalty.\nawait this.actor.addCondition(\"fatigued\")\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\nthis.effect.updateSource({\"duration.rounds\" : duration});\nthis.script.scriptMessage(`

${this.actor.prototypeToken.name} has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.

`, \n{\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n}) ","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Arcane Magic (Fire)\"))\n{\n this.actor.addCondition(\"ablaze\");\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\n{\n\targs.flags.amputatedFootOrLeg= true;\n\targs.fields.modifier -= 20;\n}","iuSoKntfJ4eAPafQ":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\");\nspells = spells.filter(s => [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\n\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\nif (choice[0])\n{\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\n}\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\n}","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\n{\n args.item.system.qualities.value.push({name : \"penetrating\"})\n}","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \n{\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Minor Exposure to Corruption}`\n )\n this.script.scriptMessage(\n `${this.effect.name}: \n @Corruption[minor]{Minor Exposure to Corruption}
\n ${args.actor.prototypeToken.name} must take an \n Average (+20%) Corruption (Minor) Test`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","jC8o5PbnqEvOoZ9N":"this.actor.addCondition(\"poisoned\", 2)","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\nwoundsGained = Math.ceil(woundsGained / 2)\n\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\n\nargs.actor.addCondition(\"fatigued\")\nargs.attacker.hasCondition(\"fatigued\")?.delete();\n\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\n\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\n{\n await broken.delete();\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\n this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\n}","jHgxpe6TJDlP3oTn":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\");\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\n\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\nif (choice[0])\n{\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\n}\n","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\n\targs.abort = `${this.effect.name}: Ignored`","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\n{\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Poisoned Condition Gained\", success: \"Resisted Poisoned Condition\" } })\n await test.roll();\n if (test.failed)\n { \n args.actor.addCondition(\"poisoned\");\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\n {\n args.actor.addCondition(\"unconscious\")\n }\n }\n}\n\n // else\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\n","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.addImpact = true\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Added\")\n }","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\n{\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\nawait this.actor.addCondition(\"deafened\")\nawait this.actor.addCondition(\"fatigued\")","jbZPLb4wuqJpHLUx":"this.item.system.flaws.value.push({name : \"dangerous\"})","jdS2u1tQPYeO55WI":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif (type == \"cold\")\n{\n\tlet stunned = Math.max(1, Math.trunc(args.totalWoundLoss / 5))\n\tawait args.actor.addCondition(\"stunned\", stunned);\n}\n\nif (type == \"corrosion\")\n{\n let damageItems = await Dialog.confirm({title : this.item.name, content : `

Damage all Items carried?

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

${item.name} damage by 1

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

${item.name} damage by 1

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

${item.name} damage by 1

`\n\t\t}\n\t\tif (msg)\n\t\t{\n\t\t\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\n\t\t}\n\t}\n}\n\nif (type == \"fire\")\n{\n\tawait args.actor.addCondition(\"ablaze\");\n}\n\nif (type == \"electricity\")\n{\n\tawait args.actor.addCondition(\"stunned\");\n}\n\nif (type == \"poison\")\n{\n\tawait args.actor.addCondition(\"poisoned\");\n}\n\n","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"poisoned\")","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\n","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \n }\n else \n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\n }\n}\nelse \n{\n this.script.scriptNotification(\"No Token Image path configured. The image path should be set in the first line of this script.\", \"error\");\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();\nreturn true;","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\n await test.roll();\n if (test.failed)\n {\n\t args.actor.addCondition(\"stunned\");\n }\n\targs.actor.hasCondition(\"bleeding\")?.delete()\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\n{\n args.test.result.damage +=1 \n args.test.result.additionalDamage += 1\n}","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll(); \nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}\n ","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Ranged (Bow)\")\n{\n args.item.system.modifier.value += 20;\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\n","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\nteeth = teeth.toObject();\n\nlet roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n// Kind of insane but whatever\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (opposedResult.differenceSL < 6)\n {\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\n }\n else if (opposedResult.differenceSL >= 6)\n {\n this.actor.addCondition(\"broken\");\n }\n}","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.scriptMessage(\"Immune to Poisoned\")\n poisoned.delete()\n}","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","lII4KMRblqwFBlsV":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 15\n}\nlet skills = [\"Channelling\", \"Charm\", \"Perform (Dancing)\"]\nlet skillAdvancements = [0, 6, 3]\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Marsh Lights\", \"Sleep\"];\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'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(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\nthis.script.scriptNotification(\"Added \" + item.name)","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\nlet damage = this.actor.system.characteristics.s.bonus + 6\n\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if(test.failed)\n {\n await this.actor.addCondition(\"stunned\")\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n }\n })","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n\nlet infectedData = infected.toObject();\nlet fearData = fear.toObject();\nfearData.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\nthis.script.scriptMessage(msg)\nthis.actor.modifyWounds(-1)","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"poisoned\")\n}","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`

Apply blunt damage reduction? (-3)

`})\n\nif (blunt)\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Blunt Damage Reduction\", value : -3})\n}","lhemR8EP5tGNKout":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : \"Suffer Creeping Irrationality\"}})\nawait test.roll();\nif (test.failed)\n{\n msg = `

@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: ${Math.ceil(CONFIG.Dice.randomUniform() * 10)}

`\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n msg += `

${this.actor.prototypeToken.name} also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}

`\n let newCorruption = Number(this.actor.status.corruption.value) + 1\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\n }\n\n this.script.scriptMessage(msg);\n}\n","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, 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 = `@ROLL`\n let msg =\n `

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

\n

${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Weapon Skill

\n

${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Ballistic Skill

\n

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

\n

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

\n

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

\n

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

\n `\n this.script.scriptMessage(msg);\n\n let characteristics = duplicate(this.actor.system.characteristics)\n\n characteristics.ws.initial -= ws\n characteristics.bs.initial -= bs\n characteristics.s.initial -= s\n characteristics.t.initial -= t\n characteristics.ag.initial -= ag\n characteristics.dex.initial -= dex\n\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\n{\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\n if (slash)\n {\n slash.value = \"2A\"\n }\n}","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\nargs.prefillModifiers.successBonus++;\n","m8qBlbH7ROoqa22o":"return args.options.reload","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","mJ9eMPub4epJSf00":"return args.weapon?.system.qualities.value.find(i => i.name == \"shield\") && this.actor.attacker","mPxmCsXYirAIT913":"let key = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.characteristics, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({changes : [{key : `system.characteristics.${key[0].id}.modifier`, mode : 2, value : 10}]})","mRvLsSVxNyt8LVZb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z\")\nlet data = item.toObject();\ndata.name += \" (To Be Determined)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","mTnmPcjWmvScIBWY":"return args.skill?.name.includes(\"Channelling\") || args.type == \"channelling\"","mV4Tmc0yfpL09KV7":"args.actor.addCondition(\"entangled\")","mYL4i1vNlMl4vFYy":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\n{\n args.flags.trained = true;\n args.fields.modifier += 10;\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","mr8qm5Bg6k1idZ6Q":"return args.item?.name == \"Play (Lute)\"","mziJBUYcsrhkdcCJ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{ \n this.actor.addCondition(\"prone\")\n}","n5RJqJL9fdRIxkuN":"if (this.actor.system.status.advantage.value > 0)\n{\n await this.actor.modifyAdvantage(-1);\n this.script.scriptNotification(\"Advantage Subtracted\")\n}\nelse \n{\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\n{\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Dodge\", { fields: { difficulty: \"average\" } }).then(async test => {\n await test.roll();\n if (test.failed) {\n await args.actor.addCondition(\"bleeding\")\n await args.actor.addCondition(\"entangled\")\n }\n })","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n args.fields.modifier -= 10;\n}\nelse if ([\"wp\"].includes(args.characteristic))\n{\n args.fields.modifier += 10;\n}","naF5EWr1CBkYRZTK":"if (args.opposedTest?.attackerTest?.item?.system?.isRanged) \n{\n let choice = await Dialog.wait({\n title: this.effect.name,\n content: `

Abort damage with ${this.effect.name}?`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"No\",\n callback: () => {\n return false;\n }\n }\n }\n })\n\n if (choice)\n {\n args.abort = `${this.effect.name}: Damage cancelled`\n }\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\n","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\n{\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\n}","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\n{\n this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\n They gain +50 to Swim Tests and can breathe underwater.
\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \n `,\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.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o3JUBKLvE6bBxK2n":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" } })\nawait test.roll();\nif (test.failed) \n{\n await this.actor.addCondition(\"prone\")\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\n injury = injury.toObject()\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\n if (injury.system.location.key[0] == \"r\")\n {\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\n }\n else if (injury.system.location.key[0] == \"l\")\n {\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\n }\n setProperty(injury, \"system.wfrp4e.count\", toes)\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\n}","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\n\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\n\nthis.script.scriptMessage(`Gained ${points} Fortune Points`)","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\n{\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let msg = `Rolled ${roll}.`\n if (roll >= 7)\n {\n msg = `Attack hits with an SL of ${roll - 6}.`\n }\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\n\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\n{\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\n}","oHenUKtaS3jT5xQn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4xF7M6ylIiGntekh\")\nitem = item.toObject()\nitem.name = this.effect.name\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n","oPg4se8iQRD14kmB":"let filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 1, \"Choose an appropriate Polearm or Two-Handed Weapon\")\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => equip(i))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\n\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\n\nthis.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\n args.test.preData.canReverse = true","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n \n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)\n }\n}","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\n await test.roll()\n if (test.failed) {\n this.actor.modifyWounds(-1);\n this.script.scriptMessage(\"Takes 1 Damage\")\n }\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\n\nfunction tinDifference(layers)\n{ \n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\n\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\n\n return metalAP - tinAP;\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","ohl803m0tUwNfKAk":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 5 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","okW06V9UiPC4Vcrn":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Cool\", \"Dodge\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Combat Reflexes\", \"Resolute\"]\nlet trappings = [\"Leather Jack\", \"Leather Leggings\", \"Leather Skullcap\", \"Hand Weapon\", \"Spear\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","okr3TtzpFoefUuJS":"let item = await fromUuid('Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX')\nlet data = item.toObject();\ndata.system.location.value = \"Collar Bone\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","oqgd9G6oI1ncPYLw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CV9btQn09S9Fn8Jk\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nreturn test.failed;","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\nlet data = item.toObject();\ndata.name += \" (Woodlands)\";\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Arcane Magic (Light)\", \"talent\")\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\n\nif (!talent)\n{\n await this.actor.addCondition(\"blinded\")\n}\n\nif (demon)\n{\n await this.actor.addCondition(\"stunned\")\n}","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\n {\n args.actor.addCondition('ablaze')\n }","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\n\nif (criticals.length)\n{\n this.script.scriptNotification(\"Cannot suffer Critical Wounds\");\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\n}\n\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\n{\n this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\n}","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n this.actor.addCondition(\"prone\")\n}","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n","pzknBcJtZWeliE27":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\") || args.item?.name == game.i18n.localize(\"NAME.Cool\")","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n ws : game.wfrp4e.config.characteristics.ws,\n t : game.wfrp4e.config.characteristics.t,\n ag : game.wfrp4e.config.characteristics.ag,\n wp : game.wfrp4e.config.characteristics.wp\n}, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \n{\n if (args.test.succeeded) \n {\n let staunch = Number(args.test.result.SL) + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n }\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n }\n}","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\nlet fearData = fear.toObject();\nlet leaderData = leader.toObject();\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n effectData.duration.seconds = 10800\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Night Vision\") && !this.actor.has(\"Night Vision\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\n{\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\nthis.actor.status.encumbrance.pct = 0;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qmOt7h17hGAKqQe0":"\nlet choice = await Dialog.wait({\n title: this.effect.name,\n content: `

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

`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"No\",\n callback: () => {\n return false;\n }\n }\n }\n})\n\nif (choice)\n{\n\targs.ward = 6;\n}","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `${this.effect.name}: Vomit!`} })\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","qxzhPtysAjPWspKf":"if (this.actor.has(\"Undead\") || this.actor.has(\"Daemonic\"))\n{\n this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);\n}","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.script.scriptNotification(\"Cannot be surprised\");\n this.actor.removeCondition(\"surprised\");\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\n\narmour.name = \"Armour (Hide)\"\narmour.system.specification.value = 2\nbite.system.specification.value = 3\nfear.system.specification.value = 2\nweapon.system.specification.value = 4\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\n\n\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\n\nblessed.system.specification.value = \"Ulric\"\nsize.system.specification.value = \"Large\"\n\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\n\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\n\nitems = items.concat(chosen || [])\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\n{\n args.test.result.damage += 1\n args.test.result.additionalDamage += 1\n if (!args.test.result.resolute) {\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\n args.test.result.resolute = true // Prevent duplicate messages\n }\n}\n","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\nlet terrorTraitItem = item.toObject()\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rXMylpnEtZpwou6x":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"fatigued\") \n }\n})","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\n{\n this.actor.removeCondition(\"bleeding\");\n this.script.scriptNotification(\"Removed 1 Bleeding Condition\")\n}\nelse \n{\n this.script.scriptNotification(\"No Bleeding Conditions\");\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (data.system.location.key[0] == \"r\")\n{\n\tdata.system.location.value = \"Right Ankle\"\n}\nelse if (data.system.location.key[0] == \"l\")\n{\n\tdata.system.location.value = \"Left Ankle\"\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\n effectData.duration.seconds = 60 * minutes\n this.script.scriptMessage(`Duration: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\n{\n args.item.system.modifier.value += 30;\n}","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Drop the item!`}, 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.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nreturn test.succeeded","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\ntest.roll();","rxB1AqfVMDqTRieE":"return ![\"ws\", \"bs\", \"ag\"].includes(args.characteristic) && args.skill?.name != game.i18n.localize(\"NAME.Perception\")","s0kTuDE0qv68V2KI":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFBF00\"}}));\n","s5bO0Sf0qpS27Tve":"await args.actor.addCondition(\"ablaze\", 3)\nawait args.actor.addCondition(\"prone\");","s6eZXfZkC1My6EXl":"let lore = this.effect.name.split(\" \")[2].toLowerCase();\nif (args.item.type == \"spell\" && args.item.system.lore.value == lore)\n{\n args.item.system.cn.value -= 1\n}\n","s7gJQdzuM3fz2zQK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Hip\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","s8idWt9YdMTRfnjV":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","s8xU6OOZbbfo6VIw":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus\n","s94yKZ4o5XN4JWM1":"// Any attack with such ammunition which inflicts at least one Wound,\n// also inflicts one Bleeding Condition.\n\nif (args.totalWoundLoss > 0) {\n args.actor.addCondition(\"bleeding\")\n}\n","sAVpm7hFRHpbCLXm":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"i\"].includes(args.characteristic)","sB4KB9bT3nQhAoqG":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","sHfkTRqTWPg2JAGN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","sKO8TcLIkCTnFvXu":"args.abort = true;\nthis.script.scriptNotification(`Cannot use ${this.item.system.location.value}!`, \"error\")","sNSfDBIA2k17hPYI":"let ablaze = this.actor.hasCondition(\"ablaze\");\nif (ablaze)\n{\n\tablaze?.delete();\n\tthis.script.scriptNotification(\"Ignore Ablaze\");\n}\n","sSMg43ZjnNmpytfj":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\nawait test.roll();\n","sUHuj00IpoZ7Gd03":"return args.skill?.name != game.i18n.localize(\"NAME.Swim\");","sWyO1DNaqb2EdHoW":"if (!this.actor.items.getName(game.i18n.localize(\"NAME.Frenzy\"))) // Either frenzy trait or psychology\n{\n // Add Frenzy psychology\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\n let data = item.toObject();\n data.effects[0].disabled = false;\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}\n\nthis.script.scriptMessage(`

By imbibing this potion, ${this.actor.prototypeToken.name} has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.

`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\nlet data = item.toObject();\ndata.name = data.name.replace(\"Target\", \"Greenskins, Undead, Chaos\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","sagKJM6oDFlw4ED2":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nreturn test.failed;","sbK1a7txpSoXFzyB":"if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\n}","scfm5iWWBxWI6QaK":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","sgS9rblPkQB36C8S":"if (this.item.name.includes(\"(\"))\n{\n\tlet trade = this.item.parenthesesText;\n\tif (trade?.toLowerCase() != \"any\")\n\t return this.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"any one\", trade)})\n}\n\nlet index = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Trade\")))\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(index, 1, \"Choose a Trade Skill\")\nlet text;\nif (!choice[0])\n{\n let custom = await ValueDialog.create(\"Enter Custom Trade Skill\", \"Custom Trade\"); \n text = custom || \"\"\n}\nelse \n{\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\n}\n\nawait this.item.updateSource({name : this.item.name.replace(\"(Any)\", \"\").replace(\"(any)\", \"\").trim() + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"any one\", text)});","shkBUtUuMPDKvFm7":"let test = await this.actor.setupSkill(\"Dodge\", {fields : {difficulty : \"average\"}})\nlet caster = this.effect.sourceActor\n\nlet fallen = this.effect.sourceTest.result.SL + caster.characteristics.wp.bonus\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n this.script.scriptMessage(`${this.actor.prototypeToken.name} falls ${fallen} yards`)\n}","skVq3eDEYKFF2iZp":"// I'm assuming the endurance test specified is for the end-round check\nawait this.actor.addCondition(\"poisoned\", 4);\n","sm9d5lk6cM0OuUkf":"this.actor.applyFear(Math.min(4, this.effect.sourceTest.result.overcast.usage.other.current))","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\n\nif (location == \"lArm\")\n{\n\tthis.script.scriptNotification(\"Rolled Left\")\n}\nelse if (location == \"rArm\")\n{\n\tthis.script.scriptNotification(\"Rolled Right\")\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\n\nif (location)\n{\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\n\n if (dropped.length)\n {\n this.script.scriptNotification(`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(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syBgPp7rOymCZejX":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunity to Psychology\")?.delete();\n\nlet roll = await new Roll(\"1d10\").roll();\n\nroll.toMessage(this.script.getChatData());\n\nthis.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","tCIT1a12Gt6k2ohA":"let resistance\nif (this.item.name.includes(\"(\"))\n{\n\tresistance = this.item.parenthesesText\n}\nelse \n{\n resistance = await ValueDialog.create(\"Enter Resistance\", \"Resistance\") \n \n if (resistance)\n {\n this.item.updateSource({name : this.item.name + ` (${resistance})`})\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\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 += ` (${resistance})`})\n}","tDrs0aNIYmZPsOoS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}\n","tFAKRRRfTjQfdQz3":"this.actor.getActiveTokens().forEach(t => t.document.update({\"texture.tint\" : \"\"}));","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) \n{\n let add = 0\n\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \n {\n add = 1 // can't use isFumble if no hit location\n }\n\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\n\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\nif (args.applyAP && nonmagical) \n{\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\n args.modifiers.ap.ignored += nonmagical\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Non-Magical AP (\" + nonmagical + \")\");\n}","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n this.script.scriptNotification(`Cleared ${fatigued.conditionValue} Fatigued Conditions`)\n fatigued.delete(); \n}\nelse \n{\n\tthis.script.scriptNotification(`No Fatigued Conditions`)\n}","tcZug8ehU6lyYBd9":"return args.skill?.name != \"Ranged (Blackpowder)\"","tdICiJ26rJrDbxT6":"return args.characteristic != \"i\"","tn6SwmjAuNzqE6dx":"let damage = 0\nlet test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\n\nif (test.succeeded)\n{\n damage = 10;\n}\nelse if (test.failed)\n{\n damage = 20;\n}\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\n\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\nthis.script.scriptMessage(`Location: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\n\nif (test.failed)\n{\n let sourceActor = this.effect.sourceActor;\n if (sourceActor)\n {\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\n }\n}","u3olS2p7Ls1JXfAH":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"mutatephys\", {}, \"Tzeentch\"));","u5dNZ0s3lWfL8KFb":"return args.fields.charging","u6CYMSZADrfXd48Q":"args.fields.modifier += 20;","uACa6u4JLNMRgFlr":"const talents = await Promise.all([\"Furious Assault\", \"Sea Legs\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","uAy4w7y8Uu9POF8C":"args.item.system.qualities.value.push({name : \"impact\"})","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n {\n this.actor.addCondition(\"unconscious\")\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n else \n {\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\n }\n}\nelse \n{\n return false;\n}","uNYstk3eXmWamhzs":"args.actor.addCondition(\"blinded\")","uOHAsKlkFuIaAmjb":"args.actor.modifyWounds(1)","uSwkYENTOcnfRrqA":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) && args.weapon?.system?.attackType != \"melee\"","ucF4aiJ1gpDB333G":"if (args.test.options.catfall && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) && !args.test.result.catfall)\n{\n args.test.result.other.push(`${this.effect.name}: Fall distance damage reduced by ${Number(args.test.result.SL) + 1} yards`)\n args.test.result.catfall = true; // Prevent duplicate messages\n}","ugL5IBB6R2yWyMWd":"if (args.totalWoundLoss > 0)\n{\n let apply = await Dialog.confirm({title : this.effect.name, content : `

Appy ${this.effect.name} Damage? Attacker must have used bare hands or a melee weapon made of metal.`})\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 += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\n this.script.scriptMessage(msg)\n }\n}","upfK6GM33qZCZjll":"return args.item?.name != \"Play (Lute)\"","uwdQvZtzy2HVeEzx":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData());\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n \n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.script.scriptMessage(\"\" + args.actor.name + \" takes a @Table[critbody]{Critical Hit} to the torse\", {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n }\n })\n}\n","ux3jaLpAUhZ5YqA6":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\") && args.item?.name != game.i18n.localize(\"NAME.Cool\")","v00nVCRKqqRvY28t":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\", 3)\n}\n","v4CCxVaVGf9i8U7X":"let cured = await Dialog.wait({\n title : this.effect.name,\n content : \"

Enter the number of diseases/poisons cured

\",\n buttons : {\n confirm : {\n label : \"Confirm\",\n callback : (dlg) => {\n let input = dlg.find(\"input\");\n value = parseInt(input[0].value);\n return value;\n }\n }\n }\n})\n\n\nlet damage = 0;\n\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet test = new Roll(`${rolls.join(\" + \")}`);\nawait test.roll();\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\nthis.script.scriptMessage(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Ranged (Bow)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Longbow\",\n },\n {\n type : \"ammunition\",\n name : \"Arrow\",\n }\n]\nlet choice2 = [\n]\n\nlet choice = await Dialog.wait({\n title : \"Option\",\n content : \n `

\n Add Option?\n

\n
    \n
  1. Ranged (Bow) +10 and a Longbow with 12 Arrows
  2. \n
\n `,\n buttons : {\n 1 : {\n label : \"Yes\",\n callback : () => {\n return choice1;\n }\n },\n 2 : {\n label : \"No\",\n callback : () => {\n return choice2;\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","v6LIG7EwWYALxCpP":"return !this.effect.getFlag(\"wfrp4e\", \"trained\")?.includes(\"entertain\") || (!args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Play\")))","vFUVWZ1l8wpTjLcx":"if (!this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))\n return\n\nlet caster = this.effect.sourceActor;\nif (caster) \n{\n let wp = caster.system.characteristics.wp\n if (this.actor.system.characteristics.wp.value >= wp.value)\n {\n this.script.scriptNotification(\"Target has higher Willpower, no effect\")\n return\n }\n this.actor.applyBasicDamage(wp.bonus, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL })\n}","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \n{\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\n await test.roll();\n if (test.failed) \n {\n await args.actor.addCondition(\"poisoned\")\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\n }\n })\n}","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData())\n\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\n ChatMessage.create({\n content: `\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n })\n}\n","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","vc4bELo0cWYoILfB":"let choice = await ItemDialog.create(this.actor.itemTypes.disease, 1, \"Choose a disease to heal (must be naturally occuring)\")\n\nthis.script.scriptMessage(`Cured ${choice[0]?.name}`);\nchoice[0].delete()","vc8eVKtyjtOGvWlK":"if (!this.actor.hasCondition(\"entangled\"))\n{\n this.effect.delete();\n}","vcM0IgsYVmfWrlO3":"fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n})","vgfs0DXvF5iKrz1M":"return args.characteristic != \"ag\" || this.item.getFlag(\"wfrp4e\", \"passed\")","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\nif (SL < 0)\n SL = 0\nthis.actor.addCondition(\"fatigued\", 1 + SL)","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\nif (broken)\n{\n broken.delete();\n this.script.scriptNotification(\"Removed Broken\")\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\nargs.modifiers.other.push({label : this.effect.name, value : -1)","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"prone\")\n\tawait this.actor.addCondition(\"stunned\")\n}\n \nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\n{\n delete args.test.result.minormis\n}\n// Decrement the major miscast to minor miscast\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\n{\n delete args.test.result.majormis\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet slOver = this.effect.sourceTest.result.slOver;\nlet overcast = this.effect.sourceTest.result.overcast\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\nlet added = Math.floor(slOver / 3) || 0\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 60\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\n{\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\n await test.roll()\n if (test.failed) {\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\n disease = disease.toObject()\n disease.system.duration.active = true\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\n }\n })\n}","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\nlet msg = \"\";\nfor(let item of items)\n{\n if (item.system.properties.qualities.durable)\n {\n await item.update({\"system.qualities.value\" : []});\n msg += `

${item.name} loses all Qualities

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

${item.name} crumbles into dust!

` \n await item.update({name : item.name + \" (Dust)\"})\n }\n}\nif(msg)\n{\n this.script.scriptMessage(msg);\n}","whUSkaR1yem21bXp":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 6,\n \"int\" : -5,\n \"wp\" : 0,\n \"fel\" : 10\n}\nlet skills = [\"Melee (Basic)\", \"Track\"]\nlet skillAdvancements = [8, 7]\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there'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(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\n\n this.script.scriptNotification(\"This test only applies to criminals, otherwise close the dialog.\");\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \n {\n await test.roll();\n if (test.failed)\n {\n args.actor.addCondition(\"unconscious\");\n }\n });","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Does not need to make Fear or Terror tests\");\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\n\nawait this.actor.addCondition(\"deafened\", 3)\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"Gain a Broken Condition\", success : \"Avoided Broken Condition\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"broken\")\n}","x2RLUUNB7BiIDYCP":"\n let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n \n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, skipTargets: true, appendTitle : \" - Blight\"})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"dead\");\n }\n ","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nlet data = item.toObject();\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\ndata.system.specification.value = 5\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\nawait test.roll();\n\nif (test.succeeded)\n{\n\tthis.actor.removeCondition(\"prone\");\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\n}\nelse \n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\nChatMessage.create({content : \"Grace is beyond style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\n \"nobles\" : \"Nobles\",\n \"guilders\" : \"Guilders\",\n \"servants\" : \"Servants\"\n}), 1, \"Choose Group\")\n\nlet name = choice[0]?.name\n\nif (!name)\n{\n return;\n}\n\nif (item)\n{\n item.update({\n name : item.name.split(\"(\")[0] + ` (${name})`, \n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\n })\n}\nelse \n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\n let data = item.toObject();\n data.name += ` (${name})`\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\n scythe.name = \"Scythe of Shyish\";\n scythe.system.damage.value = \"WPB + 3\"\n scythe.system.equipped = true;\n scythe.img = this.effect.icon;\n scythe.system.qualities.value.push({name : \"magical\"})\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","xIRU2SaqLeWmqGDI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\")\nlet data = item.toObject();\ndata.name += \" (Disease)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xL4S0H1RP8hhXW7c":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xneBqGOs1QS7kfUr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xLKAuD6yzwjAL6tJ":"return !args.weapon || args.weapon?.system.properties?.qualities.shield || !this.item.system.usesLocation(args.weapon)","xMhhVol8Is3DJ3gb":"if (this.effect.sourceTest.succeeded)\n{\n let blinded = 1 + this.effect.sourceTest.result.overcast.usage.other.count\n this.actor.addCondition(\"blinded\", blinded)\n}","xPDMpOvC1ZBVxrNg":"args.fields.modifier += 10;","xPwa3NftkpMBc2AO":"return ![\"ws\", \"s\", \"ag\"].includes(args.characteristic)","xQ3xR2Wf0wHFa76H":"return [\"ws\", \"bs\", \"fel\", \"dex\"].includes(args.characteristic) || args.weapon","xQnoRTHotZKrwPrx":"return args.type == \"cast\" && args.item?.system.lore?.value == \"shadow\"","xRTmMwNfdirjsi8X":"this.actor.addCondition(\"ablaze\");\n\nthis.actor.applyBasicDamage(this.effect.sourceTest.result.damage)","xRd6oA1QWLVpfoBm":"if (!this.actor.has(\"Night Vision\"))\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\");\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}","xS2su09zcza9du09":"if ([\"Minor\", \"Moderate\", \"Major\"].includes(this.item.system.specification.value))\n{\n\treturn\n}\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({minor : \"Minor\", moderate : \"Moderate\", major : \"Major\"}, this.item.img), 1, \"Choose Corruption Severity\");\n\nthis.item.updateSource({\"system.specification.value\" : choice[0]?.name || \"\"})","xUpKYT7BZCSmAfUy":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","xYTkj8jhSVOSoLbC":"this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] = true;","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\n}","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\n They suffer –20 to all attempts to resist Disease.
\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \n `,\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.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n","xklncIMwQIespDxS":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"vhard\"}});\nawait test.roll();\ngame.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData())\n\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\");\n}","xnHobI9HojObLHMp":"args.applyTB = false;\nargs.applyAP = false;","xobGBJbgFjQCrwvq":"let roll;\nif (this.actor.has(game.i18n.localize(\"NAME.Daemonic\")) || this.actor.has(game.i18n.localize(\"NAME.Undead\")) || [\"Goblin\", \"Orc\", \"Undead\"].includes(this.actor.system.details.species.value))\n{\n roll = await new Roll(`1d10 + ${this.effect.sourceTest.result.overcast.usage.other.current}`).roll()\n}\nelse \n{\n roll = await new Roll(`1d10`).roll()\n}\n\nroll.toMessage(this.script.getChatData())\nawait this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true})\n\nif (this.actor.has(\"Undead\") || args.actor.has(\"Daemonic\"))\n{\n this.actor.addCondition(\"ablaze\")\n}","xpgXWoK2zDnG1uiF":"let stunned = args.actor.hasCondition(\"stunned\")\nif (stunned)\n setProperty(stunned, \"flags.wfrp4e.scriptData\", getProperty(stunned, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet poisoned= args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n setProperty(poisoned, \"flags.wfrp4e.scriptData\", getProperty(poisoned, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet deafened = args.actor.hasCondition(\"deafened\")\nif (deafened)\n setProperty(deafened, \"flags.wfrp4e.scriptData\", getProperty(deafened, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet entangled = args.actor.hasCondition(\"entangled\")\nif (entangled)\n setProperty(entangled, \"flags.wfrp4e.scriptData\", getProperty(entangled, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet blinded = args.actor.hasCondition(\"blinded\")\nif (blinded)\n setProperty(blinded, \"flags.wfrp4e.scriptData\", getProperty(blinded, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet broken = args.actor.hasCondition(\"broken\")\nif (broken)\n setProperty(broken, \"flags.wfrp4e.scriptData\", getProperty(broken, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet prone= args.actor.hasCondition(\"prone\")\nif (prone)\n setProperty(prone, \"flags.wfrp4e.scriptData\", getProperty(prone, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","xq3RANOtmPhy77ne":"args.update({texture : {tint : \"#FFBF00\"}});","xqWxV9w5ezBQdJkZ":"return args.options.corruption;","xvGxwv7X0Vq3vNqb":"args.fields.modifier -= 10;","xvH4PKJasHcehOZz":"return args.skill?.name == `${game.i18n.localize(\"NAME.Lore\")} (${this.item.parenthesesText})`","y3agVFVBR8tVqWyx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","yAL0YwZWVm8o1nxa":"if (this.actor.hasCondition(\"dead\") && !this.actor.gardenOfCorpses)\n{\n this.script.scriptMessage(\"[[3d10]] @UUID[Compendium.wfrp4e-core.actors.T79RqnDOAQLn3I1s]{zombies} spring forth from the remains.\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n this.actor.gardenOfCorpses = true;\n // local storage is sufficient to prevent multiple messages\n}","yCgH3N9AurIiAv0i":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"(Sens)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let sense = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${sense})`;\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n taste : \"Goût\",\n sight : \"Vue\",\n smell : \"Odorat\",\n hearing : \"Ouie\",\n touch : \"Toucher\"\n }, this.item.img), 1, \"Choisir un sens\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = `${tests.split(\"(\")[0].trim()} (${choice[0].name})`\n }\n }\n\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","yDvxF9llUYwJg0sE":"if (getProperty(args.data, \"system.loaded.value\") == true)\n{\n let repeaterValue = Math.ceil(CONFIG.Dice.randomUniform() * 10);\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value);\n let repeater = qualities.find(i => i.name == \"repeater\")\n if (repeater)\n {\n repeater.value = repeaterValue\n }\n else \n {\n qualities.push({name : \"repeater\", value : repeaterValue})\n }\n setProperty(args.data, \"system.loaded.amt\", repeaterValue)\n this.item.update({\"system.qualities.value\" : qualities});\n this.script.scriptNotification(\"Repeater \" + repeaterValue);\n}\nelse if (getProperty(args.data, \"system.loaded.value\") == false)\n{\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value).filter(i => i.name != \"repeater\");\n this.item.update({\"system.qualities.value\" : qualities});\n}","yFMvxecXAZ6T2O0S":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.cLOGeMqUty61nYB9]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","yIGItnshXI4W46cp":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\");","yMMzZ7daCqRlGT3N":"let item = args.opposedTest.attackerTest.item;\nif (!item.isMagical && (item.type == \"weapon\" || item.type == \"trait\"))\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Remove Damage Rating\", value : -1 * (args.totalWoundLoss - args.opposedTest.result.differenceSL)})\n}\n","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","yRRzSKlcN3L7rEEe":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Play\"));","yTmRoUstxHMso91c":"if (args.item.name == \"Magic Resistance\" && args.item.type == \"trait\")\n{\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\n}","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","yatUu0cd7iKs50rq":"return args.skill?.name != game.i18n.localize(\"NAME.Track\");","ybxDG2ezvRx02LYx":"return !args.options.corruption","ynNCBAYwJFkTiXV1":"this.actor.system.status.addArmour(4, {source : this.effect})","ynV7tz0OdCwlsQp6":"let msg = \"\"\nmsg += `

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

`\nmsg += `

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

`\nmsg += `

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

`\n\nthis.script.scriptMessage(msg);","ynoHNXXCGRS6fTqF":"let msg = \"\"\n\nlet i_gain = (await new Roll(\"1d10\").roll()).total\n\nif (args.actor.characteristics.i.value <= 0)\n{\n i_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nmsg = `${this.actor.prototypeToken.name} gains ${i_gain} Initiative`\n\nlet newValue = i_gain + args.actor.characteristics.i.modifier\n\nthis.actor.update({\"system.characteristics.i.modifier\" : newValue})\n\n\nlet hitloc = await game.wfrp4e.tables.rollTable(\"hitloc\")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : value})\n\nmsg += ` as eyes push out of their ${desc}`\n\nthis.script.scriptMessage(msg)","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\n\tthis.script.scriptNotification(\"Applied after effects\");\n}","z5HfNUrHy5MS3K7a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","z926Cl2vxUfyLY0V":"if (![\"rArm\", \"lArm\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true\n\nreturn [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","z9NEbIUBsKMaTuCz":"if (args.opposedTest.result.hitloc && args.opposedTest.result.hitloc.value == \"head\") \n{\n args.actor.addCondition(\"entangled\")\n}","zA6TDttpwMSMl7D8":"// An imbiber must take a Consume Alcohol Test.\nthis.actor.setupSkill(game.i18n.localize(\"NAME.ConsumeAlcohol\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll()\n // If they succeed, \n // as a result of whatever potential futures they glimpse, \n // they can spend a Fortune Point within the next hour to reverse the dice of any failed Test.\n if (test.succeeded) {\n this.script.scriptMessage(`As a result of whatever potential futures they glimpse, ${this.actor.prototypeToken.name} can spend a Fortune Point within the next hour to reverse the dice of any failed Test.`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n }) \n }\n})","zBHTIBU8OlYj1YIO":"args.fields.modifier += this.effect.sourceActor?.system.characteristics.wp.value;","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Added Bleeding\")\n}","zR4WAjzXHTZuiu5G":"let actor = this.actor;\n let effect = this.effect;\n let bleedingAmt;\n let bleedingRoll;\n let msg = \"\"\n\n let damage = effect.conditionValue;\n let scriptArgs = {msg, damage};\n await Promise.all(actor.runScripts(\"preApplyCondition\", {effect, data : scriptArgs}))\n msg = scriptArgs.msg;\n damage = scriptArgs.damage;\n msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})\n\n if (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\"))\n {\n await actor.addCondition(\"unconscious\")\n msg += \"
\" + game.i18n.format(\"BleedUnc\", {name: actor.prototypeToken.name })\n }\n\n if (actor.hasCondition(\"unconscious\"))\n {\n bleedingAmt = effect.conditionValue;\n bleedingRoll = (await new Roll(\"1d100\").roll()).total;\n if (bleedingRoll <= bleedingAmt * 10)\n {\n msg += \"
\" + game.i18n.format(\"BleedFail\", {name: actor.prototypeToken.name}) + \" (\" + game.i18n.localize(\"Rolled\") + \" \" + bleedingRoll + \")\";\n await actor.addCondition(\"dead\")\n }\n else if (bleedingRoll % 11 == 0)\n {\n msg += \"
\" + game.i18n.format(\"BleedCrit\", { name: actor.prototypeToken.name } ) + \" (\" + game.i18n.localize(\"Rolled\") + bleedingRoll + \")\"\n await actor.removeCondition(\"bleeding\")\n }\n else\n {\n msg += \"
\" + game.i18n.localize(\"BleedRoll\") + \": \" + bleedingRoll;\n }\n }\n\n await Promise.all(actor.runScripts(\"applyCondition\", {effect, data : {bleedingRoll}}))\n if (args.suppressMessage)\n {\n let messageData = game.wfrp4e.utility.chatDataSetup(msg);\n messageData.speaker = {alias: this.effect.name}\n messageData.flavor = this.effect.name;\n return messageData\n }\n else\n {\n return this.script.scriptMessage(msg)\n }\n ","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nif (test.succeeded)\n{\n this.effect.delete()\n}","zadppy7FEbXvgUON":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 5\n }\n let skills = [\"Perception\", \"Sleight of Hand\", \"Stealth (Urban)\"]\n let skillAdvancements = [10, 10, 10]\n let talents = [\"Criminal\", \"Etiquette (Criminals)\"]\n let trappings = [\"Rope, 10 yards\", \"Lockpick\", \"Mask\"]\n let items = []\n \n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (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 \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(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\n if (target.actor.details.size.value == \"tiny\")\n modifier = 30\n if (target.actor.details.size.value == \"ltl\")\n modifier = 20\n if (target.actor.details.size.value == \"sml\")\n modifier = 10\n\t\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zphxI8VSWbNQCMBy":"args.size = \"lrg\"","zqShIJnrRReGgP94":"let {added, removed} = this.effect.getFlag(\"wfrp4e\", \"propertiesChanged\");\n\nfor(let property of (added || []))\n{\n let hasValue = game.wfrp4e.config.propertyHasValue[property];\n if (!args.item.system.qualities.value.find(i => i.name == property))\n {\n args.item.system.qualities.value.push({name : property, value : (hasValue ? 2 : null)})\n }\n}\n\nfor(let property of (removed || []))\n{\n args.item.system.flaws.value = args.item.system.flaws.value.filter(i => i.name != property)\n}","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","zzk2uRSFjFHB5kjw":"\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n {\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n }\n else if (args.test.isFumble && roll != 1)\n args.test.result.other.push(\"Misfire Roll: \" + roll)"}); + +} \ No newline at end of file diff --git a/module.json b/module.json index bbcc130..ee535d0 100644 --- a/module.json +++ b/module.json @@ -12,7 +12,8 @@ "esmodules": [ "babele-register.js", "addon-register.js", - "modules/import-stat-2.js" + "modules/import-stat-2.js", + "./loadScripts.js" ], "styles": [ "patch-styles.css" diff --git a/package.json b/package.json new file mode 100644 index 0000000..48acb60 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "foundryvtt-wh4-lang-fr-fr", + "version": "1.0.0", + "description": "WH4 Translation", + "main": "babele-register.js", + "type": "module", + "scripts": { + "build": "node scriptPacker.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr.git" + }, + "author": "LeRatierBretonnien", + "license": "ISC" +} diff --git a/packs/aides-de-jeu-fr/000675.log b/packs/aides-de-jeu-fr/000690.log similarity index 100% rename from packs/aides-de-jeu-fr/000675.log rename to packs/aides-de-jeu-fr/000690.log diff --git a/packs/aides-de-jeu-fr/CURRENT b/packs/aides-de-jeu-fr/CURRENT index 7c9beee..9aeeae0 100644 --- a/packs/aides-de-jeu-fr/CURRENT +++ b/packs/aides-de-jeu-fr/CURRENT @@ -1 +1 @@ -MANIFEST-000673 +MANIFEST-000689 diff --git a/packs/aides-de-jeu-fr/LOG b/packs/aides-de-jeu-fr/LOG index 35b1929..340abc9 100644 --- a/packs/aides-de-jeu-fr/LOG +++ b/packs/aides-de-jeu-fr/LOG @@ -1,7 +1,3 @@ -2024/05/14-23:48:30.544546 7f505e0006c0 Recovering log #671 -2024/05/14-23:48:30.556244 7f505e0006c0 Delete type=3 #669 -2024/05/14-23:48:30.556333 7f505e0006c0 Delete type=0 #671 -2024/05/14-23:52:38.338843 7f50574006c0 Level-0 table #676: started -2024/05/14-23:52:38.338863 7f50574006c0 Level-0 table #676: 0 bytes OK -2024/05/14-23:52:38.344995 7f50574006c0 Delete type=0 #674 -2024/05/14-23:52:38.345156 7f50574006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end) +2024/05/17-00:32:51.990246 7fe5356006c0 Recovering log #687 +2024/05/17-00:32:52.000905 7fe5356006c0 Delete type=3 #685 +2024/05/17-00:32:52.001011 7fe5356006c0 Delete type=0 #687 diff --git a/packs/aides-de-jeu-fr/LOG.old b/packs/aides-de-jeu-fr/LOG.old index ca86fa3..d58fe06 100644 --- a/packs/aides-de-jeu-fr/LOG.old +++ b/packs/aides-de-jeu-fr/LOG.old @@ -1,7 +1,7 @@ -2024/05/12-19:57:00.248099 7f003e0006c0 Recovering log #667 -2024/05/12-19:57:00.258537 7f003e0006c0 Delete type=3 #665 -2024/05/12-19:57:00.258601 7f003e0006c0 Delete type=0 #667 -2024/05/12-20:49:52.183624 7f00374006c0 Level-0 table #672: started -2024/05/12-20:49:52.183681 7f00374006c0 Level-0 table #672: 0 bytes OK -2024/05/12-20:49:52.190384 7f00374006c0 Delete type=0 #670 -2024/05/12-20:49:52.197399 7f00374006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.265904 7fe5356006c0 Recovering log #683 +2024/05/16-23:31:09.275748 7fe5356006c0 Delete type=3 #681 +2024/05/16-23:31:09.275914 7fe5356006c0 Delete type=0 #683 +2024/05/16-23:31:47.713351 7fe52e2006c0 Level-0 table #688: started +2024/05/16-23:31:47.713384 7fe52e2006c0 Level-0 table #688: 0 bytes OK +2024/05/16-23:31:47.720374 7fe52e2006c0 Delete type=0 #686 +2024/05/16-23:31:47.740138 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end) diff --git a/packs/aides-de-jeu-fr/MANIFEST-000673 b/packs/aides-de-jeu-fr/MANIFEST-000689 similarity index 71% rename from packs/aides-de-jeu-fr/MANIFEST-000673 rename to packs/aides-de-jeu-fr/MANIFEST-000689 index 457f094..c285d4b 100644 Binary files a/packs/aides-de-jeu-fr/MANIFEST-000673 and b/packs/aides-de-jeu-fr/MANIFEST-000689 differ diff --git a/packs/antidotes-and-remedes/000677.log b/packs/antidotes-and-remedes/000692.log similarity index 100% rename from packs/antidotes-and-remedes/000677.log rename to packs/antidotes-and-remedes/000692.log diff --git a/packs/antidotes-and-remedes/CURRENT b/packs/antidotes-and-remedes/CURRENT index f90546c..0216dad 100644 --- a/packs/antidotes-and-remedes/CURRENT +++ b/packs/antidotes-and-remedes/CURRENT @@ -1 +1 @@ -MANIFEST-000675 +MANIFEST-000691 diff --git a/packs/antidotes-and-remedes/LOG b/packs/antidotes-and-remedes/LOG index ce12ace..26033e9 100644 --- a/packs/antidotes-and-remedes/LOG +++ b/packs/antidotes-and-remedes/LOG @@ -1,7 +1,3 @@ -2024/05/14-23:48:30.559289 7f505fe006c0 Recovering log #673 -2024/05/14-23:48:30.569004 7f505fe006c0 Delete type=3 #671 -2024/05/14-23:48:30.569056 7f505fe006c0 Delete type=0 #673 -2024/05/14-23:52:38.318581 7f50574006c0 Level-0 table #678: started -2024/05/14-23:52:38.318638 7f50574006c0 Level-0 table #678: 0 bytes OK -2024/05/14-23:52:38.325513 7f50574006c0 Delete type=0 #676 -2024/05/14-23:52:38.325810 7f50574006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) +2024/05/17-00:32:52.003117 7fe536a006c0 Recovering log #689 +2024/05/17-00:32:52.013524 7fe536a006c0 Delete type=3 #687 +2024/05/17-00:32:52.013746 7fe536a006c0 Delete type=0 #689 diff --git a/packs/antidotes-and-remedes/LOG.old b/packs/antidotes-and-remedes/LOG.old index 699b0e3..ccb0af7 100644 --- a/packs/antidotes-and-remedes/LOG.old +++ b/packs/antidotes-and-remedes/LOG.old @@ -1,7 +1,7 @@ -2024/05/12-19:57:00.261517 7f003f4006c0 Recovering log #669 -2024/05/12-19:57:00.271873 7f003f4006c0 Delete type=3 #667 -2024/05/12-19:57:00.271979 7f003f4006c0 Delete type=0 #669 -2024/05/12-20:49:52.155346 7f00374006c0 Level-0 table #674: started -2024/05/12-20:49:52.155386 7f00374006c0 Level-0 table #674: 0 bytes OK -2024/05/12-20:49:52.162269 7f00374006c0 Delete type=0 #672 -2024/05/12-20:49:52.176604 7f00374006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.278348 7fe536a006c0 Recovering log #685 +2024/05/16-23:31:09.288721 7fe536a006c0 Delete type=3 #683 +2024/05/16-23:31:09.288781 7fe536a006c0 Delete type=0 #685 +2024/05/16-23:31:47.726632 7fe52e2006c0 Level-0 table #690: started +2024/05/16-23:31:47.726653 7fe52e2006c0 Level-0 table #690: 0 bytes OK +2024/05/16-23:31:47.733317 7fe52e2006c0 Delete type=0 #688 +2024/05/16-23:31:47.740158 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) diff --git a/packs/antidotes-and-remedes/MANIFEST-000675 b/packs/antidotes-and-remedes/MANIFEST-000691 similarity index 71% rename from packs/antidotes-and-remedes/MANIFEST-000675 rename to packs/antidotes-and-remedes/MANIFEST-000691 index 0f9b01e..15006bd 100644 Binary files a/packs/antidotes-and-remedes/MANIFEST-000675 and b/packs/antidotes-and-remedes/MANIFEST-000691 differ diff --git a/packs/apothicarium/000675.log b/packs/apothicarium/000690.log similarity index 100% rename from packs/apothicarium/000675.log rename to packs/apothicarium/000690.log diff --git a/packs/apothicarium/CURRENT b/packs/apothicarium/CURRENT index 7c9beee..9aeeae0 100644 --- a/packs/apothicarium/CURRENT +++ b/packs/apothicarium/CURRENT @@ -1 +1 @@ -MANIFEST-000673 +MANIFEST-000689 diff --git a/packs/apothicarium/LOG b/packs/apothicarium/LOG index b9886ba..1a807c0 100644 --- a/packs/apothicarium/LOG +++ b/packs/apothicarium/LOG @@ -1,7 +1,3 @@ -2024/05/14-23:48:30.588953 7f505fe006c0 Recovering log #671 -2024/05/14-23:48:30.598904 7f505fe006c0 Delete type=3 #669 -2024/05/14-23:48:30.598970 7f505fe006c0 Delete type=0 #671 -2024/05/14-23:52:38.332297 7f50574006c0 Level-0 table #676: started -2024/05/14-23:52:38.332334 7f50574006c0 Level-0 table #676: 0 bytes OK -2024/05/14-23:52:38.338769 7f50574006c0 Delete type=0 #674 -2024/05/14-23:52:38.345148 7f50574006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end) +2024/05/17-00:32:52.030367 7fe536a006c0 Recovering log #687 +2024/05/17-00:32:52.040956 7fe536a006c0 Delete type=3 #685 +2024/05/17-00:32:52.041025 7fe536a006c0 Delete type=0 #687 diff --git a/packs/apothicarium/LOG.old b/packs/apothicarium/LOG.old index 7e72bbc..431c8a8 100644 --- a/packs/apothicarium/LOG.old +++ b/packs/apothicarium/LOG.old @@ -1,7 +1,7 @@ -2024/05/12-19:57:00.287738 7f003f4006c0 Recovering log #667 -2024/05/12-19:57:00.298489 7f003f4006c0 Delete type=3 #665 -2024/05/12-19:57:00.298560 7f003f4006c0 Delete type=0 #667 -2024/05/12-20:49:52.177056 7f00374006c0 Level-0 table #672: started -2024/05/12-20:49:52.177114 7f00374006c0 Level-0 table #672: 0 bytes OK -2024/05/12-20:49:52.183382 7f00374006c0 Delete type=0 #670 -2024/05/12-20:49:52.197375 7f00374006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.306312 7fe536a006c0 Recovering log #683 +2024/05/16-23:31:09.315802 7fe536a006c0 Delete type=3 #681 +2024/05/16-23:31:09.315852 7fe536a006c0 Delete type=0 #683 +2024/05/16-23:31:47.740329 7fe52e2006c0 Level-0 table #688: started +2024/05/16-23:31:47.740348 7fe52e2006c0 Level-0 table #688: 0 bytes OK +2024/05/16-23:31:47.746309 7fe52e2006c0 Delete type=0 #686 +2024/05/16-23:31:47.746432 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end) diff --git a/packs/apothicarium/MANIFEST-000673 b/packs/apothicarium/MANIFEST-000689 similarity index 71% rename from packs/apothicarium/MANIFEST-000673 rename to packs/apothicarium/MANIFEST-000689 index 425d849..4bfaaa4 100644 Binary files a/packs/apothicarium/MANIFEST-000673 and b/packs/apothicarium/MANIFEST-000689 differ diff --git a/packs/dons-de-rhya/000675.log b/packs/dons-de-rhya/000690.log similarity index 100% rename from packs/dons-de-rhya/000675.log rename to packs/dons-de-rhya/000690.log diff --git a/packs/dons-de-rhya/CURRENT b/packs/dons-de-rhya/CURRENT index 7c9beee..9aeeae0 100644 --- a/packs/dons-de-rhya/CURRENT +++ b/packs/dons-de-rhya/CURRENT @@ -1 +1 @@ -MANIFEST-000673 +MANIFEST-000689 diff --git a/packs/dons-de-rhya/LOG b/packs/dons-de-rhya/LOG index f214197..7eae08d 100644 --- a/packs/dons-de-rhya/LOG +++ b/packs/dons-de-rhya/LOG @@ -1,7 +1,3 @@ -2024/05/14-23:48:30.530779 7f505fe006c0 Recovering log #671 -2024/05/14-23:48:30.541409 7f505fe006c0 Delete type=3 #669 -2024/05/14-23:48:30.541472 7f505fe006c0 Delete type=0 #671 -2024/05/14-23:52:38.311751 7f50574006c0 Level-0 table #676: started -2024/05/14-23:52:38.311798 7f50574006c0 Level-0 table #676: 0 bytes OK -2024/05/14-23:52:38.318370 7f50574006c0 Delete type=0 #674 -2024/05/14-23:52:38.325791 7f50574006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end) +2024/05/17-00:32:51.977571 7fe536a006c0 Recovering log #687 +2024/05/17-00:32:51.987927 7fe536a006c0 Delete type=3 #685 +2024/05/17-00:32:51.987985 7fe536a006c0 Delete type=0 #687 diff --git a/packs/dons-de-rhya/LOG.old b/packs/dons-de-rhya/LOG.old index 393b8bb..49b5e57 100644 --- a/packs/dons-de-rhya/LOG.old +++ b/packs/dons-de-rhya/LOG.old @@ -1,7 +1,7 @@ -2024/05/12-19:57:00.235722 7f003f4006c0 Recovering log #667 -2024/05/12-19:57:00.245590 7f003f4006c0 Delete type=3 #665 -2024/05/12-19:57:00.245724 7f003f4006c0 Delete type=0 #667 -2024/05/12-20:49:52.132991 7f00374006c0 Level-0 table #672: started -2024/05/12-20:49:52.133062 7f00374006c0 Level-0 table #672: 0 bytes OK -2024/05/12-20:49:52.140350 7f00374006c0 Delete type=0 #670 -2024/05/12-20:49:52.148293 7f00374006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.251603 7fe536a006c0 Recovering log #683 +2024/05/16-23:31:09.263101 7fe536a006c0 Delete type=3 #681 +2024/05/16-23:31:09.263306 7fe536a006c0 Delete type=0 #683 +2024/05/16-23:31:47.720499 7fe52e2006c0 Level-0 table #688: started +2024/05/16-23:31:47.720525 7fe52e2006c0 Level-0 table #688: 0 bytes OK +2024/05/16-23:31:47.726531 7fe52e2006c0 Delete type=0 #686 +2024/05/16-23:31:47.740148 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end) diff --git a/packs/dons-de-rhya/MANIFEST-000673 b/packs/dons-de-rhya/MANIFEST-000689 similarity index 71% rename from packs/dons-de-rhya/MANIFEST-000673 rename to packs/dons-de-rhya/MANIFEST-000689 index e6752c0..366b1be 100644 Binary files a/packs/dons-de-rhya/MANIFEST-000673 and b/packs/dons-de-rhya/MANIFEST-000689 differ diff --git a/packs/plats-dauberges/000675.log b/packs/plats-dauberges/000690.log similarity index 100% rename from packs/plats-dauberges/000675.log rename to packs/plats-dauberges/000690.log diff --git a/packs/plats-dauberges/CURRENT b/packs/plats-dauberges/CURRENT index 7c9beee..9aeeae0 100644 --- a/packs/plats-dauberges/CURRENT +++ b/packs/plats-dauberges/CURRENT @@ -1 +1 @@ -MANIFEST-000673 +MANIFEST-000689 diff --git a/packs/plats-dauberges/LOG b/packs/plats-dauberges/LOG index 058ac44..b444655 100644 --- a/packs/plats-dauberges/LOG +++ b/packs/plats-dauberges/LOG @@ -1,7 +1,3 @@ -2024/05/14-23:48:30.517212 7f505e0006c0 Recovering log #671 -2024/05/14-23:48:30.526840 7f505e0006c0 Delete type=3 #669 -2024/05/14-23:48:30.526888 7f505e0006c0 Delete type=0 #671 -2024/05/14-23:52:38.305306 7f50574006c0 Level-0 table #676: started -2024/05/14-23:52:38.305336 7f50574006c0 Level-0 table #676: 0 bytes OK -2024/05/14-23:52:38.311573 7f50574006c0 Delete type=0 #674 -2024/05/14-23:52:38.325771 7f50574006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2024/05/17-00:32:51.964446 7fe5356006c0 Recovering log #687 +2024/05/17-00:32:51.974644 7fe5356006c0 Delete type=3 #685 +2024/05/17-00:32:51.974702 7fe5356006c0 Delete type=0 #687 diff --git a/packs/plats-dauberges/LOG.old b/packs/plats-dauberges/LOG.old index b307f11..037f9df 100644 --- a/packs/plats-dauberges/LOG.old +++ b/packs/plats-dauberges/LOG.old @@ -1,7 +1,7 @@ -2024/05/12-19:57:00.221253 7f003e0006c0 Recovering log #667 -2024/05/12-19:57:00.232421 7f003e0006c0 Delete type=3 #665 -2024/05/12-19:57:00.232556 7f003e0006c0 Delete type=0 #667 -2024/05/12-20:49:52.140566 7f00374006c0 Level-0 table #672: started -2024/05/12-20:49:52.140628 7f00374006c0 Level-0 table #672: 0 bytes OK -2024/05/12-20:49:52.147897 7f00374006c0 Delete type=0 #670 -2024/05/12-20:49:52.148331 7f00374006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.239221 7fe5356006c0 Recovering log #683 +2024/05/16-23:31:09.249489 7fe5356006c0 Delete type=3 #681 +2024/05/16-23:31:09.249541 7fe5356006c0 Delete type=0 #683 +2024/05/16-23:31:47.706801 7fe52e2006c0 Level-0 table #688: started +2024/05/16-23:31:47.706831 7fe52e2006c0 Level-0 table #688: 0 bytes OK +2024/05/16-23:31:47.713069 7fe52e2006c0 Delete type=0 #686 +2024/05/16-23:31:47.713228 7fe52e2006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) diff --git a/packs/plats-dauberges/MANIFEST-000673 b/packs/plats-dauberges/MANIFEST-000689 similarity index 83% rename from packs/plats-dauberges/MANIFEST-000673 rename to packs/plats-dauberges/MANIFEST-000689 index 9f9439a..c1915f7 100644 Binary files a/packs/plats-dauberges/MANIFEST-000673 and b/packs/plats-dauberges/MANIFEST-000689 differ diff --git a/packs/tables-des-traductions/000318.log b/packs/tables-des-traductions/000333.log similarity index 100% rename from packs/tables-des-traductions/000318.log rename to packs/tables-des-traductions/000333.log diff --git a/packs/tables-des-traductions/CURRENT b/packs/tables-des-traductions/CURRENT index e90c1f7..60e4397 100644 --- a/packs/tables-des-traductions/CURRENT +++ b/packs/tables-des-traductions/CURRENT @@ -1 +1 @@ -MANIFEST-000316 +MANIFEST-000332 diff --git a/packs/tables-des-traductions/LOG b/packs/tables-des-traductions/LOG index 7ec0851..c6d4b97 100644 --- a/packs/tables-des-traductions/LOG +++ b/packs/tables-des-traductions/LOG @@ -1,8 +1,3 @@ -2024/05/14-23:48:30.572338 7f505e0006c0 Recovering log #314 -2024/05/14-23:48:30.582605 7f505e0006c0 Delete type=3 #312 -2024/05/14-23:48:30.582656 7f505e0006c0 Delete type=0 #314 -2024/05/14-23:52:38.325971 7f50574006c0 Level-0 table #319: started -2024/05/14-23:52:38.326024 7f50574006c0 Level-0 table #319: 0 bytes OK -2024/05/14-23:52:38.332122 7f50574006c0 Delete type=0 #317 -2024/05/14-23:52:38.345133 7f50574006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) -2024/05/14-23:52:38.345174 7f50574006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) +2024/05/17-00:32:52.016354 7fe5356006c0 Recovering log #330 +2024/05/17-00:32:52.027826 7fe5356006c0 Delete type=3 #328 +2024/05/17-00:32:52.027974 7fe5356006c0 Delete type=0 #330 diff --git a/packs/tables-des-traductions/LOG.old b/packs/tables-des-traductions/LOG.old index 426e847..e690dd9 100644 --- a/packs/tables-des-traductions/LOG.old +++ b/packs/tables-des-traductions/LOG.old @@ -1,8 +1,8 @@ -2024/05/12-19:57:00.275118 7f003e0006c0 Recovering log #310 -2024/05/12-19:57:00.285010 7f003e0006c0 Delete type=3 #308 -2024/05/12-19:57:00.285145 7f003e0006c0 Delete type=0 #310 -2024/05/12-20:49:52.162355 7f00374006c0 Level-0 table #315: started -2024/05/12-20:49:52.162382 7f00374006c0 Level-0 table #315: 0 bytes OK -2024/05/12-20:49:52.168680 7f00374006c0 Delete type=0 #313 -2024/05/12-20:49:52.176626 7f00374006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) -2024/05/12-20:49:52.176865 7f00374006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) +2024/05/16-23:31:09.291953 7fe5356006c0 Recovering log #326 +2024/05/16-23:31:09.303368 7fe5356006c0 Delete type=3 #324 +2024/05/16-23:31:09.303512 7fe5356006c0 Delete type=0 #326 +2024/05/16-23:31:47.733464 7fe52e2006c0 Level-0 table #331: started +2024/05/16-23:31:47.733512 7fe52e2006c0 Level-0 table #331: 0 bytes OK +2024/05/16-23:31:47.740033 7fe52e2006c0 Delete type=0 #329 +2024/05/16-23:31:47.740167 7fe52e2006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) +2024/05/16-23:31:47.740190 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end) diff --git a/packs/tables-des-traductions/MANIFEST-000316 b/packs/tables-des-traductions/MANIFEST-000316 deleted file mode 100644 index d6b24ac..0000000 Binary files a/packs/tables-des-traductions/MANIFEST-000316 and /dev/null differ diff --git a/packs/tables-des-traductions/MANIFEST-000332 b/packs/tables-des-traductions/MANIFEST-000332 new file mode 100644 index 0000000..f19b18e Binary files /dev/null and b/packs/tables-des-traductions/MANIFEST-000332 differ diff --git a/scriptPacker.js b/scriptPacker.js index a038112..158f2af 100644 --- a/scriptPacker.js +++ b/scriptPacker.js @@ -13,10 +13,7 @@ for(let file of scripts) let scriptLoader = `export default function() { - Hooks.on("init", () => - { - mergeObject(game.wfrp4e.config.effectScripts, ${JSON.stringify(scriptObj)}); - }); + mergeObject(game.wfrp4e.config.effectScripts, ${JSON.stringify(scriptObj)}); }` diff --git a/scripts/03mJu59V4iByWlsO.js b/scripts/03mJu59V4iByWlsO.js index bba8bab..6cec61b 100644 --- a/scripts/03mJu59V4iByWlsO.js +++ b/scripts/03mJu59V4iByWlsO.js @@ -6,7 +6,7 @@ await this.actor.addCondition("poisoned", 3) await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus) // and acquires the Regenerate Creature Trait. -const hasRegenerate = this.actor.has("Regenerate") +const hasRegenerate = this.actor.has("Régénération") if (hasRegenerate === undefined) { fromUuid("Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR").then(trait => { let traitItem = trait.toObject() @@ -14,12 +14,12 @@ if (hasRegenerate === undefined) { }) } -this.script.scriptMessage(`

${this.actor.prototypeToken.name} has +this.script.scriptMessage(`

${this.actor.prototypeToken.name} :

- It’s up to Ranald if their regenerating can outpace their poisoning.

-

When all Poisoned Conditions are lost, so too is Regenerate.

`, + C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.

+

Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.

`, { whisper: ChatMessage.getWhisperRecipients("GM"), blind: true }) diff --git a/scripts/0abwNjpzo3SbEOeO.js b/scripts/0abwNjpzo3SbEOeO.js index 3e7463b..c4345be 100644 --- a/scripts/0abwNjpzo3SbEOeO.js +++ b/scripts/0abwNjpzo3SbEOeO.js @@ -1,6 +1,6 @@ if (args.applyAP && args.modifiers.ap.metal) { args.modifiers.ap.ignored += args.modifiers.ap.metal - args.modifiers.ap.details.push("" + this.effect.name + ": Ignore le Métal (" + args.modifiers.ap.metal + ")"); + args.modifiers.ap.details.push("" + this.effect.name + ": Ignore le métal (" + args.modifiers.ap.metal + ")"); args.modifiers.ap.metal = 0 } \ No newline at end of file diff --git a/scripts/11uCC0mK2uL783al.js b/scripts/11uCC0mK2uL783al.js index 100b843..951bdf7 100644 --- a/scripts/11uCC0mK2uL783al.js +++ b/scripts/11uCC0mK2uL783al.js @@ -1,6 +1,6 @@ let type = this.item.getFlag("wfrp4e", "breath"); -if (["fire", "electricity", "poison"].includes(type)) +if (["feu", "electricité", "poison"].includes(type)) { args.applyAP = false; } \ No newline at end of file diff --git a/scripts/190PHSHKGaJ74wsR.js b/scripts/190PHSHKGaJ74wsR.js index dd52e55..803ba72 100644 --- a/scripts/190PHSHKGaJ74wsR.js +++ b/scripts/190PHSHKGaJ74wsR.js @@ -7,22 +7,22 @@ if (!this.item.name.includes("(") || this.item.system.tests.value.includes("Terr if (name.includes("(")) { let terrain = name.split("(")[1].split(")")[0] - tests = tests.replace("the Terrain", terrain) + tests = tests.replace("Terrain", terrain) } else // If no sense specified, provide dialog choice { let choice = await ItemDialog.create(ItemDialog.objectToArray({ - coastal : "Coastal", - deserts : "Deserts", - marshes : "Marshes", - rocky : "Rocky", + coastal : "Côtes", + deserts : "Déserts", + marshes : "Marches", + rocky : "Rocailles", tundra : "Tundra", - woodlands : "Woodlands" - }, this.item.img), 1, "Choose Terrain"); + woodlands : "Forêts" + }, this.item.img), 1, "Choisir le Terrain"); if (choice[0]) { name = `${name.split("(")[0].trim()} (${choice[0].name})` - tests = tests.replace("the Terrain", choice[0].name + " Terrain") + tests = tests.replace("Terrain", "Terrain " + choice[0].name ) } } diff --git a/scripts/23vWiHUjxtRQ3Efz.js b/scripts/23vWiHUjxtRQ3Efz.js index 5fdc693..27078fa 100644 --- a/scripts/23vWiHUjxtRQ3Efz.js +++ b/scripts/23vWiHUjxtRQ3Efz.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM") let data = item.toObject(); -data.system.location.value = "Back" +data.system.location.value = "Dos" this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) \ No newline at end of file diff --git a/scripts/2W9uMTT6iJhfQ044.js b/scripts/2W9uMTT6iJhfQ044.js index fb037b9..ab95121 100644 --- a/scripts/2W9uMTT6iJhfQ044.js +++ b/scripts/2W9uMTT6iJhfQ044.js @@ -1,4 +1,4 @@ -let skill = `Trade (${this.item.parenthesesText})` +let skill = `Métier (${this.item.parenthesesText})` let currentCareer = this.actor.system.currentCareer; let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill); diff --git a/scripts/2WSN306tL4apjRtD.js b/scripts/2WSN306tL4apjRtD.js index 6931737..f43717a 100644 --- a/scripts/2WSN306tL4apjRtD.js +++ b/scripts/2WSN306tL4apjRtD.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS") let data = item.toObject(); -data.name = data.name += " (Hearing)" +data.name = data.name += " (Ouïe)" this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/2vTVR0quRZQtjNfQ.js b/scripts/2vTVR0quRZQtjNfQ.js index 512f2c3..fa60eaf 100644 --- a/scripts/2vTVR0quRZQtjNfQ.js +++ b/scripts/2vTVR0quRZQtjNfQ.js @@ -4,15 +4,15 @@ if (!currentCareer) return; } -let talents = ["Aethyric Attunement", -"Arcane Magic (Any)", -"Chaos Magic (Tzeentch)", -"Fast Hands", -"Instinctive Diction", -"Magical Sense", -"Petty Magic", -"Second Sight", -"War Wizard", -"Witch!"].filter(t => !currentCareer.system.talents.includes(t)) +let talents = ["Harmonisation Aethyrique", +"Magie des Arcanes (Domaine)", +"Magie du Chaos (Tzeentch)", +"Mains agiles", +"Diction Instinctive", +"Sens de la Magie", +"Magie Mineure", +"Seconde Vue", +"Mage de guerre", +"Sorcier!"].filter(t => !currentCareer.system.talents.includes(t)) currentCareer.system.talents = currentCareer.system.talents.concat(talents) \ No newline at end of file diff --git a/scripts/2zeP2nMSURjxrqYz.js b/scripts/2zeP2nMSURjxrqYz.js index a0ac1e4..674dd05 100644 --- a/scripts/2zeP2nMSURjxrqYz.js +++ b/scripts/2zeP2nMSURjxrqYz.js @@ -1,6 +1,6 @@ let wounds = this.actor.system.status.wounds if (wounds.value == 0) - return this.script.scriptNotification("No effect at 0 Wounds", "error") + return this.script.scriptNotification("Aucun effet à 0 Blessures", "error") -this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus} Wounds`) +this.script.scriptNotification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`) await this.actor.modifyWounds(this.actor.characteristics.t.bonus) \ No newline at end of file diff --git a/scripts/3D5ImpMgpOTPucvv.js b/scripts/3D5ImpMgpOTPucvv.js index d69e334..72bd340 100644 --- a/scripts/3D5ImpMgpOTPucvv.js +++ b/scripts/3D5ImpMgpOTPucvv.js @@ -5,5 +5,5 @@ let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / let ones = Number(args.test.result.roll.toString().split("").pop()) if (ones > SL) - args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`) + args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`) } \ No newline at end of file diff --git a/scripts/3IGO7xEjRjat937X.js b/scripts/3IGO7xEjRjat937X.js index f45a41d..7362443 100644 --- a/scripts/3IGO7xEjRjat937X.js +++ b/scripts/3IGO7xEjRjat937X.js @@ -1,7 +1,7 @@ let fatigue = this.actor.hasCondition("fatigued") if (fatigue) { - this.script.scriptNotification("Removing Fatigued Condition, disabled effect") + this.script.scriptNotification("Suppression de l'état Fatigué, effet désactivé.") this.effect.update({disabled : true}) await this.actor.removeCondition("fatigued") } \ No newline at end of file diff --git a/scripts/3JEzEzF1SeYA9lsV.js b/scripts/3JEzEzF1SeYA9lsV.js index 1b8b828..84b5802 100644 --- a/scripts/3JEzEzF1SeYA9lsV.js +++ b/scripts/3JEzEzF1SeYA9lsV.js @@ -13,7 +13,7 @@ if (["lArm", "rArm"].includes(location)) if (dropped.length) { - this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(", ")}!`) + this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(", ")}!`) for(let weapon of dropped) { await weapon.system.toggleEquip(); diff --git a/scripts/4MQ7u4INxp51oyyR.js b/scripts/4MQ7u4INxp51oyyR.js index 95200bd..181ca28 100644 --- a/scripts/4MQ7u4INxp51oyyR.js +++ b/scripts/4MQ7u4INxp51oyyR.js @@ -10,10 +10,13 @@ let characteristics = { "wp" : 25, "fel" : 10 } -let skills = ["Cool", "Dodge", "Intimidate", "Intuition", "Leadership", "Lore (Warfare)", "Perception"] +//let skills = ["Cool", "Dodge", "Intimidate", "Intuition", "Leadership", "Lore (Warfare)", "Perception"] +let skills = ["Calme", "Equive", "Intimidation", "Intuition", "Commandement", "Savoir (Guerre)", "Perception"] + let skillAdvancements = [15, 15, 15, 15, 15, 10, 10] -let talents = ["Combat Aware", "Combat Reflexes", "Feint", "Inspiring", "Resolute", "War Leader"] -let trappings = ["Hand Weapon", "Shield"] +let talents = ["Vigilance", "Combat Instinctif", "Feinte", "Exaltant", "Déterminé", "Seigneur de guerre"] +// TODO +let trappings = ["Arme simple", "Bouclier"] let items = []; let updateObj = this.actor.toObject(); @@ -48,7 +51,7 @@ for (let talent of talents) } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } @@ -65,7 +68,7 @@ for (let trapping of trappings) } else { - ui.notifications.warn(`Could not find ${trapping}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true}) } } diff --git a/scripts/4fnTKgl0HW9ZrWyJ.js b/scripts/4fnTKgl0HW9ZrWyJ.js index e818ce4..2b3f659 100644 --- a/scripts/4fnTKgl0HW9ZrWyJ.js +++ b/scripts/4fnTKgl0HW9ZrWyJ.js @@ -4,7 +4,7 @@ this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, if (test.failed) { let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? "s" : "t"; - this.script.scriptMessage(`${this.actor.name} lost 1 point of ${game.wfrp4e.config.characteristics[char]}`) + this.script.scriptMessage(`${this.actor.name} perd 1 point de ${game.wfrp4e.config.characteristics[char]}`) this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1}) } }) \ No newline at end of file diff --git a/scripts/4pQW4WLyhjbZR85k.js b/scripts/4pQW4WLyhjbZR85k.js index 8a2680f..ffdc6ea 100644 --- a/scripts/4pQW4WLyhjbZR85k.js +++ b/scripts/4pQW4WLyhjbZR85k.js @@ -3,5 +3,5 @@ await test.roll(); if (test.failed && this.actor.type == "character") { this.actor.update({"system.status.corruption.value" : parseInt(this.actor.status.corruption.value) + 1}) - this.script.scriptMessage("Gained a Corruption point", {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage("Gain d'un Point de Corruption", {whisper : ChatMessage.getWhisperRecipients("GM")}) } \ No newline at end of file diff --git a/scripts/58rFc9HiBoX66J6p.js b/scripts/58rFc9HiBoX66J6p.js index 1e3c7a2..7c3ebd8 100644 --- a/scripts/58rFc9HiBoX66J6p.js +++ b/scripts/58rFc9HiBoX66J6p.js @@ -1,7 +1,7 @@ let sourceActor = this.effect.sourceActor; let damage = args.totalWoundLoss; let tb = sourceActor.system.characteristics.t.bonus -args.abort = `${this.effect.name}: Damage applied to ${sourceActor.name}`; +args.abort = `${this.effect.name}: Dommages appliqués à ${sourceActor.name}`; let message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}) diff --git a/scripts/5DI6cHAg1LHo54Yv.js b/scripts/5DI6cHAg1LHo54Yv.js index 6929228..ecba952 100644 --- a/scripts/5DI6cHAg1LHo54Yv.js +++ b/scripts/5DI6cHAg1LHo54Yv.js @@ -1,6 +1,5 @@ if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == "attacker") { this.actor.update({"system.status.fortune.value" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)}) - this.script.scriptMessage(`Fortune point stolen from ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) - + this.script.scriptMessage(`1 Point de Fortune volé à ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) } \ No newline at end of file diff --git a/scripts/5Fe1ELaS6Gnvy0Cj.js b/scripts/5Fe1ELaS6Gnvy0Cj.js index ad46ad3..a62afb6 100644 --- a/scripts/5Fe1ELaS6Gnvy0Cj.js +++ b/scripts/5Fe1ELaS6Gnvy0Cj.js @@ -1 +1 @@ -return args.skill?.name.includes("Channelling") || args.type == "channelling" || args.skill?.name == game.i18n.localize("NAME.Charm") || args.skill?.name.includes("Language (Magick)") || args.type == "cast" \ No newline at end of file +return args.skill?.name.includes("Focalisation") || args.type == "channelling" || args.skill?.name == game.i18n.localize("NAME.Charm") || args.skill?.name.includes("Langue (Magick)") || args.type == "cast" \ No newline at end of file diff --git a/scripts/5JWC0l3JEpOsqbR9.js b/scripts/5JWC0l3JEpOsqbR9.js index d2eb0b6..88bd2a6 100644 --- a/scripts/5JWC0l3JEpOsqbR9.js +++ b/scripts/5JWC0l3JEpOsqbR9.js @@ -10,7 +10,7 @@ let characteristics = { "wp" : 5, "fel" : 0 } -let skills = ["Dodge", "Perception"] +let skills = ["Esquive", "Perception"] let skillAdvancements = [10, 10] let talents = ["Flee!", "Marksman"] let trappings = ["Hand Weapon"] diff --git a/scripts/5JvKJZPcd6Hz5zvn.js b/scripts/5JvKJZPcd6Hz5zvn.js index be61706..d6da607 100644 --- a/scripts/5JvKJZPcd6Hz5zvn.js +++ b/scripts/5JvKJZPcd6Hz5zvn.js @@ -10,10 +10,11 @@ let characteristics = { "wp" : 15, "fel" : 0 } -let skills = ["Cool", "Dodge", "Intimidate", "Leadership"] +//let skills = ["Cool", "Dodge", "Intimidate", "Leadership"] +let skills = ["Calme", "Esquive", "Intimidation", "Commandement"] let skillAdvancements = [15, 15, 10, 5] -let talents = ["Combat Aware", "Combat Reflexes", "Feint", "Resolute"] -let trappings = ["Mail Coat", "Mail Chausses", "Mail Coif", "Hand Weapon", "Shield"] +let talents = ["Vigilance", "Combat Instinctif", "Feinte", "Déterminé"] +let trappings = ["Cotte de Mailles", "Chausses de Mailles", "Coiffe de Mailles", "Arme simple", "Bouclier"] let items = []; let updateObj = this.actor.toObject(); @@ -48,7 +49,7 @@ for (let talent of talents) } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } @@ -65,7 +66,7 @@ for (let trapping of trappings) } else { - ui.notifications.warn(`Could not find ${trapping}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true}) } } diff --git a/scripts/5M6IgCUncCwyxHok.js b/scripts/5M6IgCUncCwyxHok.js index ceef2c0..330998b 100644 --- a/scripts/5M6IgCUncCwyxHok.js +++ b/scripts/5M6IgCUncCwyxHok.js @@ -1,15 +1,15 @@ let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject(); -etiquette.name += ` (Followers of Tzeentch)`; +etiquette.name += ` (Suivants de Tzeentch)`; let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f")).toObject(); -animosity.system.specification.value = "Followers of Nurgle"; +animosity.system.specification.value = "Suivants de Nurgle"; let roll = await new Roll("ceil(1d10 / 3)").roll(); roll.toMessage(this.script.getChatData()); let mutations = []; -let msg = `

Mutations Gained

` +let msg = `

Mutations acquises

` for(let i = 0; i < roll.total; i++) { let item; diff --git a/scripts/5sI9iYh5j2nx2XyT.js b/scripts/5sI9iYh5j2nx2XyT.js index 4a9e7b3..9834162 100644 --- a/scripts/5sI9iYh5j2nx2XyT.js +++ b/scripts/5sI9iYh5j2nx2XyT.js @@ -1 +1 @@ -return !(["Animal Care", "Charm Animal"].includes(args.item?.name) || args.item?.name.includes("Ride") || args.item?.name.includes("Animal Training")) \ No newline at end of file +return !(["Soin aux animaux", "Emprise sur les animaux"].includes(args.item?.name) || args.item?.name.includes("Chevaucher") || args.item?.name.includes("Dressage")) \ No newline at end of file diff --git a/scripts/65xE9OV5sA1ZWT7j.js b/scripts/65xE9OV5sA1ZWT7j.js index 2e9318c..7ece796 100644 --- a/scripts/65xE9OV5sA1ZWT7j.js +++ b/scripts/65xE9OV5sA1ZWT7j.js @@ -5,5 +5,5 @@ let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / let ones = Number(args.test.result.roll.toString().split("").pop()) if (ones > SL) - args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`) + args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`) } \ No newline at end of file diff --git a/scripts/6Aqq4F4Xui923sc6.js b/scripts/6Aqq4F4Xui923sc6.js index 0a9ebf3..1e4990b 100644 --- a/scripts/6Aqq4F4Xui923sc6.js +++ b/scripts/6Aqq4F4Xui923sc6.js @@ -1,12 +1,12 @@ // Imbibing this substance grants the user the Painless Creature Trait. -const hasColdBlooded = this.actor.has("Cold Blooded") +const hasColdBlooded = this.actor.has("A Sang Froid") if (hasColdBlooded === undefined) { let item = await fromUuid("Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB") let data = item.toObject() this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) - this.script.scriptMessage(`

${this.actor.prototypeToken.name} has gained the Cold Blooded Creature Trait and may reverse any failed Willpower based Tests.

-

If they gain a Surprised Condition, this Condition is not lost the first time it should be (which is typically at the end of the Round or if they victim is attacked).

`, + this.script.scriptMessage(`

${this.actor.prototypeToken.name} reçoit le Trait de Créatuer A Sang Froid et peut inverser n'importe quel test de Force Mentale échoué.

+

Si il reçoit un état Surpris, cet état n'est pas perdu la première fois (typiquement à la fin du Round ou si il est attaqué).

`, {whisper: ChatMessage.getWhisperRecipients("GM"), blind: true }) } \ No newline at end of file diff --git a/scripts/6BmvV9c03FkfisnE.js b/scripts/6BmvV9c03FkfisnE.js index 3d03be7..77954b8 100644 --- a/scripts/6BmvV9c03FkfisnE.js +++ b/scripts/6BmvV9c03FkfisnE.js @@ -2,8 +2,8 @@ if (args.equipped) { this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()]) - this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
- They gain +1 Corruption point if an exposure Test is failed, which will need to be manually applied.
If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption} + this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.
+ Il gagne +1 Point de Corruption point si un Test de Corruption est échoué, à appliquer manuellement.
Si le personnage porte le masque pendant plus d'une heure ou utilise les effets du masque, il est exposé à une @Corruption[moderate]{Corruption Modérée} `, {whisper: ChatMessage.getWhisperRecipients("GM")}) } @@ -12,8 +12,8 @@ if (args.equipped) { else if (!args.equipped) { await this.item.effects.contents[0].delete(); - await this.item.update({name : this.item.name += " (Used)"}) - this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, + await this.item.update({name : this.item.name += " (Utilisé)"}) + this.script.scriptMessage(`${this.item.name} de ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être manuellement supprimés.`, {whisper: ChatMessage.getWhisperRecipients("GM")} ) diff --git a/scripts/6H6vNjzvMGl2ZqCR.js b/scripts/6H6vNjzvMGl2ZqCR.js index 751934a..adcbe71 100644 --- a/scripts/6H6vNjzvMGl2ZqCR.js +++ b/scripts/6H6vNjzvMGl2ZqCR.js @@ -1,2 +1,2 @@ if (args.totalWoundLoss > 0) - this.script.scriptMessage(`Blade of Nurglitch: ${args.actor.name} must pass an Difficult (-10) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM") }) \ No newline at end of file + this.script.scriptMessage(`Lame de Nurglitch: ${args.actor.name} doit réussir un Test d'Endurance Difficile (-10) ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM") }) \ No newline at end of file diff --git a/scripts/6JrUjs3g5x6bFnj3.js b/scripts/6JrUjs3g5x6bFnj3.js index 71e0979..5655bd3 100644 --- a/scripts/6JrUjs3g5x6bFnj3.js +++ b/scripts/6JrUjs3g5x6bFnj3.js @@ -4,5 +4,5 @@ let biteData = bite.toObject(); let senseData = sense.toObject(); biteData.system.specification.value = 6 - this.actor.characteristics.s.bonus; -senseData.name = senseData.name += " (Smell)" +senseData.name = senseData.name += " (Odorat)" this.actor.createEmbeddedDocuments("Item", [biteData, senseData], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/6QZUX7ZrFxOzqI0b.js b/scripts/6QZUX7ZrFxOzqI0b.js index de2a760..fb1222e 100644 --- a/scripts/6QZUX7ZrFxOzqI0b.js +++ b/scripts/6QZUX7ZrFxOzqI0b.js @@ -1,4 +1,4 @@ -let regenerate = this.actor.items.getName('Regenerate') +let regenerate = this.actor.items.getName('Régénération') if (regenerate) { diff --git a/scripts/6ZS1rQLkNvMDO0Fp.js b/scripts/6ZS1rQLkNvMDO0Fp.js index 609a9eb..f1c2324 100644 --- a/scripts/6ZS1rQLkNvMDO0Fp.js +++ b/scripts/6ZS1rQLkNvMDO0Fp.js @@ -1,11 +1,11 @@ let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10) if (args.test.isFumble && roll == 1 && !args.test.result.misfire) { - args.test.result.misfire = game.i18n.localize("Misfire") + " (Rolled 1)" + args.test.result.misfire = game.i18n.localize("Misfire") + " (Résultat 1)" args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage) } else if (args.test.isFumble && roll != 1) { - args.test.result.other.push("Misfire Roll: " + roll) + args.test.result.other.push("Résultat du Raté: " + roll) } diff --git a/scripts/6hAgggYpNR3r4QWC.js b/scripts/6hAgggYpNR3r4QWC.js index 5604471..a2f7221 100644 --- a/scripts/6hAgggYpNR3r4QWC.js +++ b/scripts/6hAgggYpNR3r4QWC.js @@ -1,5 +1,5 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0") item = item.toObject() -let species = args.actor.Species || " of your species" -item.name = `Animosity (all not ${species})` +let species = args.actor.Species || " de votre espèce" +item.name = `Animosité (tous sauf ${species})` this.actor.createEmbeddedDocuments("Item", [item], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/6jcTzK1XEuWqAacN.js b/scripts/6jcTzK1XEuWqAacN.js index f41b3fe..6da3cb5 100644 --- a/scripts/6jcTzK1XEuWqAacN.js +++ b/scripts/6jcTzK1XEuWqAacN.js @@ -1,2 +1,2 @@ args.abort = true; -this.script.scriptNotification(`Cannot use ${game.wfrp4e.config.locations[this.effect.getFlag("wfrp4e", "location")]}!`, "error") \ No newline at end of file +this.script.scriptNotification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag("wfrp4e", "location")]}!`, "error") \ No newline at end of file diff --git a/scripts/6kifXp2jXEaQVJsg.js b/scripts/6kifXp2jXEaQVJsg.js index debb784..d715b54 100644 --- a/scripts/6kifXp2jXEaQVJsg.js +++ b/scripts/6kifXp2jXEaQVJsg.js @@ -1,6 +1,6 @@ let useWard = await Dialog.wait({ title : this.effect.name, - content : `

Use Ward provided by ${this.effect.name}?`, + content : `

Utiliser Ward fourni par ${this.effect.name}?`, buttons : { yes : { label : "Yes", diff --git a/scripts/6mpw9cGseG4W4eyd.js b/scripts/6mpw9cGseG4W4eyd.js index 1a3b985..e927ba5 100644 --- a/scripts/6mpw9cGseG4W4eyd.js +++ b/scripts/6mpw9cGseG4W4eyd.js @@ -1,11 +1,11 @@ if (this.actor.system.status.advantage.value >= 2) { await this.actor.modifyAdvantage(-2); - this.script.scriptNotification("Advantage Subtracted") + this.script.scriptNotification("Avvantage soustrait") } else { - return this.script.scriptNotification("Not enough Advantage!", "error") + return this.script.scriptNotification("Pas assez d'Avantages!", "error") } let test = await this.actor.setupTrait(this.item) diff --git a/scripts/6uldpFvKOCoW92cC.js b/scripts/6uldpFvKOCoW92cC.js index 9f67eea..087f48d 100644 --- a/scripts/6uldpFvKOCoW92cC.js +++ b/scripts/6uldpFvKOCoW92cC.js @@ -2,7 +2,7 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3") item = item.toObject() item.system.specification.value = 10; -item.name += " (Fire)" +item.name += " (Feu)" setProperty(item, "flags.wfrp4e.breath", "fire") Item.create(item, {parent : this.actor, fromEffect: this.effect.id}) \ No newline at end of file diff --git a/scripts/6xTtJEhRc4OjcDTf.js b/scripts/6xTtJEhRc4OjcDTf.js index 5a8b642..1851340 100644 --- a/scripts/6xTtJEhRc4OjcDTf.js +++ b/scripts/6xTtJEhRc4OjcDTf.js @@ -1,5 +1,5 @@ if (getProperty(args.data, "system.status.fortune.value")) { - this.script.scriptNotification("Cannot update Fortune"); + this.script.scriptNotification("Impossible de mettre à jour la Fortune"); delete args.data.system.status.wounds.value; } \ No newline at end of file diff --git a/scripts/7Ck0fkzE4WQ62qVe.js b/scripts/7Ck0fkzE4WQ62qVe.js index 6850a0b..5fc2ca7 100644 --- a/scripts/7Ck0fkzE4WQ62qVe.js +++ b/scripts/7Ck0fkzE4WQ62qVe.js @@ -1,4 +1,4 @@ -if (args.item.type == "skill" && args.item.name == "Melee (Basic)") +if (args.item.type == "skill" && args.item.name == "Corps à corps (Base)") { args.item.system.modifier.value += 20; } \ No newline at end of file diff --git a/scripts/7F6aGxZJjwxm5e5P.js b/scripts/7F6aGxZJjwxm5e5P.js index 18e9f56..d077af9 100644 --- a/scripts/7F6aGxZJjwxm5e5P.js +++ b/scripts/7F6aGxZJjwxm5e5P.js @@ -1,6 +1,6 @@ if (args.test.result.castOutcome == "failure") { - ValueDialog.create("Enter Wounds Lost to gain SL", this.effect.name, "0").then(async value => { + ValueDialog.create("Sasir le nombre de Blessures perdues en échange de DR", this.effect.name, "0").then(async value => { value = Math.clamped(value, 0, 3) if (value == 0) { @@ -8,11 +8,11 @@ if (args.test.result.castOutcome == "failure") } else if (Number.isNumeric(value)) { - this.script.scriptNotification(`Lost ${value} Wounds`) + this.script.scriptNotification(`Perte de ${value} Blessures`) this.actor.modifyWounds(-1 * value) await this.item.system.toggleEquip(); args.test.addSL(value); - args.test.preData.other.push(`${this.effect.name}: +${value} SL`) + args.test.preData.other.push(`${this.effect.name}: +${value} DR`) } }) } \ No newline at end of file diff --git a/scripts/7JW9t8AYSDkkzG2V.js b/scripts/7JW9t8AYSDkkzG2V.js index 5e3d751..fe58e6c 100644 --- a/scripts/7JW9t8AYSDkkzG2V.js +++ b/scripts/7JW9t8AYSDkkzG2V.js @@ -3,8 +3,8 @@ if (args.equipped) { this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()]) - this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
- If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. + this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.
+ Si le personnage porte le masque pendant plus d'une heure ou bénéficie de ses effets, il s'espose à une @Corruption[moderate]{Corruption Modérée}. `, {whisper: ChatMessage.getWhisperRecipients("GM")}) } @@ -13,8 +13,8 @@ if (args.equipped) else if (!args.equipped) { await this.item.effects.contents[0].delete(); - await this.item.update({name : this.item.name += " (Used)"}) - this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, + await this.item.update({name : this.item.name += " (Utilisé)"}) + this.script.scriptMessage(`${this.item.name} porté par ${this.actor.name} a été enlevé et a perdu ses capacités. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`, {whisper: ChatMessage.getWhisperRecipients("GM")} ) diff --git a/scripts/7WR2hJjHPhHhHxAq.js b/scripts/7WR2hJjHPhHhHxAq.js index 45d5ca2..1743398 100644 --- a/scripts/7WR2hJjHPhHhHxAq.js +++ b/scripts/7WR2hJjHPhHhHxAq.js @@ -1,8 +1,8 @@ let poisoned = args.actor.hasCondition("poisoned") if (poisoned) { - this.script.scriptNotification(`Removed ${poisoned.conditionValue} Poisoned Conditions`) + this.script.scriptNotification(`Suppression de ${poisoned.conditionValue} états Empoisonné`) poisoned.delete(); } else - this.script.scriptNotification(`No Poisoned Conditions`) \ No newline at end of file + this.script.scriptNotification(`Aucun état Empoisonné`) \ No newline at end of file diff --git a/scripts/7ZoFUMDG2WJd8RMg.js b/scripts/7ZoFUMDG2WJd8RMg.js index 0ff8299..d32f444 100644 --- a/scripts/7ZoFUMDG2WJd8RMg.js +++ b/scripts/7ZoFUMDG2WJd8RMg.js @@ -1 +1 @@ -this.script.scriptMessage(`Claimed ${this.effect.name} Bonus`); \ No newline at end of file +this.script.scriptMessage(`Revendiquer le Bonus de ${this.effect.name} `); \ No newline at end of file diff --git a/scripts/7e8FgQUF2oANANmx.js b/scripts/7e8FgQUF2oANANmx.js index b195380..8f24b0a 100644 --- a/scripts/7e8FgQUF2oANANmx.js +++ b/scripts/7e8FgQUF2oANANmx.js @@ -1 +1 @@ -return args.skill?.name == "Melee (Brawling)" || args.item?.weaponGroup?.value == "brawling" \ No newline at end of file +return args.skill?.name == "Corps à corps (Bagarre)" || args.item?.weaponGroup?.value == "brawling" \ No newline at end of file diff --git a/scripts/7wBWUw05q0igh508.js b/scripts/7wBWUw05q0igh508.js index 95e3da1..0c02215 100644 --- a/scripts/7wBWUw05q0igh508.js +++ b/scripts/7wBWUw05q0igh508.js @@ -1,5 +1,5 @@ // Imbibing this substance grants the user the Painless Creature Trait. -const hasPainless = this.actor.has("Painless"); +const hasPainless = this.actor.has("Insensible à la douleur"); if (hasPainless === undefined) { let item = await fromUuid("Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr"); @@ -7,11 +7,7 @@ if (hasPainless === undefined) this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) this.script.scriptMessage( - `

${this.actor.prototypeToken.name} has gained the Painless Creature Trait. This - effect lasts for one hour, after which it dissipates and the full effect - of all the imbiber's wounds come crashing down at once.

-

Note that this does not prevent the user from acquiring a Critical - Wound or dying from one. It merely allows them to ignore most - of their effects.

`, + `

${this.actor.prototypeToken.name} gagne le Trait de Creature Insensible à la Douleur. Cet effet dure 1 heure, après quoi il disparait et le total des Blessures encaissés par le buveur sont encaissés d'un coup.

+

Notez que cela n'empêche pas le buveur de recevoir une Blessure Critique ou de mourrir. Cela permet par contre d'éviter la majorité de leur effets.

`, { whisper: ChatMessage.getWhisperRecipients("GM"), blind: true}) } \ No newline at end of file diff --git a/scripts/84IB8CWa55XzoAkv.js b/scripts/84IB8CWa55XzoAkv.js index 3cdc615..a324f4b 100644 --- a/scripts/84IB8CWa55XzoAkv.js +++ b/scripts/84IB8CWa55XzoAkv.js @@ -1 +1 @@ -return (["Animal Care", "Charm Animal"].includes(args.item?.name) || args.item?.name.includes("Ride") || args.item?.name.includes("Animal Training")) \ No newline at end of file +return (["Soin aux animaux", "Emprise sur les animaux"].includes(args.item?.name) || args.item?.name.includes("Chevaucher") || args.item?.name.includes("Dressage")) \ No newline at end of file diff --git a/scripts/8ByuHnUZ4RNTdGVv.js b/scripts/8ByuHnUZ4RNTdGVv.js index 37290b2..8952a02 100644 --- a/scripts/8ByuHnUZ4RNTdGVv.js +++ b/scripts/8ByuHnUZ4RNTdGVv.js @@ -1,9 +1,9 @@ let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10) let tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10) -if (!this.actor.has("Undead") && !this.actor.has("Daemonic")) +if (!this.actor.has("Mort-vivant") && !this.actor.has("Démoniaque")) { - this.actor.setupSkill(game.i18n.localize("NAME.Cool"), { appendTitle: " - " + this.effect.name, fields: { difficulty: "average" }, context: { failure: `Lost ${strLoss} Strength and ${tghLoss} Toughness` } }).then(async test => { + this.actor.setupSkill(game.i18n.localize("NAME.Cool"), { appendTitle: " - " + this.effect.name, fields: { difficulty: "average" }, context: { failure: `Pert de ${strLoss} en Force et ${tghLoss} en Endurance` } }).then(async test => { await test.roll(); if (test.failed) { this.actor.update({ "system.characteristics.s.initial": this.actor.system.characteristics.s.initial - strLoss, "system.characteristics.t.initial": this.actor.system.characteristics.t.initial - tghLoss }) @@ -12,5 +12,5 @@ if (!this.actor.has("Undead") && !this.actor.has("Daemonic")) } else { - this.script.scriptNotification(`${this.actor.name} is immune to ${this.effect.name}`) + this.script.scriptNotification(`${this.actor.name} est immunisé à ${this.effect.name}`) } diff --git a/scripts/8GyJgdHVBaLrHCY8.js b/scripts/8GyJgdHVBaLrHCY8.js index 2ee98a7..56adde3 100644 --- a/scripts/8GyJgdHVBaLrHCY8.js +++ b/scripts/8GyJgdHVBaLrHCY8.js @@ -1,17 +1,17 @@ let type = this.item.getFlag("wfrp4e", "breath") let types = { - none : "None", - cold : "Cold", + none : "Aucun", + cold : "Froid", corrosion : "Corrosion", - fire : "Fire", - electricity : "Electricity", + fire : "Feu", + electricity : "Electricité", poison : "Poison", - smoke : "Smoke", - various : "Various" + smoke : "Fumée", + various : "Divers" } if (!type) { - type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, "Choose Breath"))[0]?.id; + type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, "Choisir le Souffle"))[0]?.id; this.item.updateSource({"flags.wfrp4e.breath" : type}) } diff --git a/scripts/8araLuwmBq8GKEw3.js b/scripts/8araLuwmBq8GKEw3.js index 66a5c92..ff0d686 100644 --- a/scripts/8araLuwmBq8GKEw3.js +++ b/scripts/8araLuwmBq8GKEw3.js @@ -3,5 +3,5 @@ let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpo if (APIgnored) { args.modifiers.ap.ignored += APIgnored - args.modifiers.ap.details.push(`${this.effect.name}: Ignore AP with Weakpoints (${APIgnored})`) + args.modifiers.ap.details.push(`${this.effect.name}: Ignorer les PA avec des Points Faibles (${APIgnored})`) } \ No newline at end of file diff --git a/scripts/8rq4GL5d5nCn4kO7.js b/scripts/8rq4GL5d5nCn4kO7.js index 79c9046..c94cb1c 100644 --- a/scripts/8rq4GL5d5nCn4kO7.js +++ b/scripts/8rq4GL5d5nCn4kO7.js @@ -3,5 +3,5 @@ if (caster) { let healed= caster.characteristics.wp.bonus this.actor.modifyWounds(healed); - this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`) + this.script.scriptMessage(`${this.actor.prototypeToken.name} regagne ${healed} Blessures`) } \ No newline at end of file diff --git a/scripts/8tyMXDfHR8AJBdDu.js b/scripts/8tyMXDfHR8AJBdDu.js index 9e0a473..8ba19d6 100644 --- a/scripts/8tyMXDfHR8AJBdDu.js +++ b/scripts/8tyMXDfHR8AJBdDu.js @@ -3,5 +3,5 @@ let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce if (weakpointsAP > 0) { args.modifiers.ap.ignored += weakpointsAP; - args.modifiers.ap.details.push(`${this.effect.name} - Ignore Weakpoints (${weakpointsAP})`); + args.modifiers.ap.details.push(`${this.effect.name} - Ignore les Points Faibles (${weakpointsAP})`); } \ No newline at end of file diff --git a/scripts/8zTkDVziBPaNbMQX.js b/scripts/8zTkDVziBPaNbMQX.js index c032cba..6ac4c72 100644 --- a/scripts/8zTkDVziBPaNbMQX.js +++ b/scripts/8zTkDVziBPaNbMQX.js @@ -9,7 +9,7 @@ let filters = [ } ] -let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, "Choose 6 Petty Spells") +let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, "Choisir 6 sorts de Magie Mineure") filters = [ @@ -23,7 +23,7 @@ filters = [ } ] -let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, "Choose 9 Arcane Spells") +let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, "Choisir 9 Sorts d'Arcane") let items = petty.concat(arcane).map(i => i.toObject()) diff --git a/scripts/9A7rYY3FKi5XLihG.js b/scripts/9A7rYY3FKi5XLihG.js index e8ade7a..4977a44 100644 --- a/scripts/9A7rYY3FKi5XLihG.js +++ b/scripts/9A7rYY3FKi5XLihG.js @@ -1,6 +1,6 @@ fromUuid("Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79").then(item => { let data = item.toObject(); data.system.tests.value = data.system.tests.value.replace("coins", "metal objects"); - data.system.description.value += "

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

" + data.system.description.value += "

Ce Talent s'applique également à tout objet métallique à cause de l'Affinité Metallique

" this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}) }) \ No newline at end of file diff --git a/scripts/9JnPK1jNUEso7Pv8.js b/scripts/9JnPK1jNUEso7Pv8.js index 8c33cb3..db4cfc0 100644 --- a/scripts/9JnPK1jNUEso7Pv8.js +++ b/scripts/9JnPK1jNUEso7Pv8.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS") let data = item.toObject(); -data.name += ` (Smell)` +data.name += ` (Odorat)` this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/9VfeubiCV83LN9iY.js b/scripts/9VfeubiCV83LN9iY.js index 83f9f95..b48a14a 100644 --- a/scripts/9VfeubiCV83LN9iY.js +++ b/scripts/9VfeubiCV83LN9iY.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM") let data = item.toObject(); -data.name += ` (When Charging)` +data.name += ` (Si Charge)` this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/9WZa63lr0K3SsP4G.js b/scripts/9WZa63lr0K3SsP4G.js index bac4c09..cf89e60 100644 --- a/scripts/9WZa63lr0K3SsP4G.js +++ b/scripts/9WZa63lr0K3SsP4G.js @@ -3,5 +3,5 @@ let sourceItem = this.effect.sourceItem; if (sourceItem) { this.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]}) - this.script.scriptNotification("Applied after effects"); + this.script.scriptNotification("Applique après les effets"); } \ No newline at end of file diff --git a/scripts/9Yn9uViEjcuaESJ2.js b/scripts/9Yn9uViEjcuaESJ2.js index f964391..b09b963 100644 --- a/scripts/9Yn9uViEjcuaESJ2.js +++ b/scripts/9Yn9uViEjcuaESJ2.js @@ -1,6 +1,6 @@ if (this.item.getFlag("wfrp4e", "failedCool")) { - this.item.name += " (No AP)" + this.item.name += " (Aucun PA)" this.item.system.AP = { "head": 0, "lArm": 0, diff --git a/scripts/9fK07tqqZyPg7dpx.js b/scripts/9fK07tqqZyPg7dpx.js index baccb76..1613f20 100644 --- a/scripts/9fK07tqqZyPg7dpx.js +++ b/scripts/9fK07tqqZyPg7dpx.js @@ -2,11 +2,11 @@ let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {sk await test.roll(); if (test.failed) { - this.script.scriptNotification("Gained a Festering Wound") + this.script.scriptNotification("Subi une Blessure Purulente") let item = await fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb") this.actor.createEmbeddedDocuments("Item", [item.toObject()]) } else { - this.script.scriptNotification("Avoided a Festering Wound") + this.script.scriptNotification("Evite une Blessure Purulente") } diff --git a/scripts/A0OK0qAMmnf8iNJf.js b/scripts/A0OK0qAMmnf8iNJf.js index b3df7c5..2f137f4 100644 --- a/scripts/A0OK0qAMmnf8iNJf.js +++ b/scripts/A0OK0qAMmnf8iNJf.js @@ -1,6 +1,6 @@ if (args.test.result.SL < 0) { - this.script.scriptMessage(`Gained ${Math.abs(args.test.result.SL)} Corruption points`, {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Reçoit ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients("GM")}) if (args.test.failed && this.actor.type == "character") { this.actor.update({"system.status.corruption.value" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)}) diff --git a/scripts/A1odAcuRbq9797ZB.js b/scripts/A1odAcuRbq9797ZB.js index 04c6e12..4a76f8e 100644 --- a/scripts/A1odAcuRbq9797ZB.js +++ b/scripts/A1odAcuRbq9797ZB.js @@ -1,7 +1,7 @@ let choice1 = [ { type : "skill", - name : "Melee (Basic)", + name : "Corps à corps (Base)", diff : { system : { advances : { @@ -14,7 +14,7 @@ let choice1 = [ let choice2 = [ { type : "skill", - name : "Melee (Polearm)", + name : "Corps à corps (Armes d'hast)", diff : { system : { advances : { @@ -26,14 +26,14 @@ let choice2 = [ ] let choice = await Dialog.wait({ - title : "Choice", + title : "Choix", content : `

- Select your choice + Choisissez une option

    -
  1. Melee (Basic)
  2. -
  3. Melee (Polearm)
  4. +
  5. Corps à corps (Base)
  6. +
  7. Corps à corps (Armes d'hast)
`, buttons : { @@ -44,7 +44,7 @@ let choice = await Dialog.wait({ } }, 2 : { - label : "Polearm", + label : "Armes d'hast", callback : () => { return choice2; } @@ -76,7 +76,7 @@ for (let c of choice) items.push(mergeObject(item, (c.diff || {}))) } else - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } diff --git a/scripts/A6DcKPzAGntzSCil.js b/scripts/A6DcKPzAGntzSCil.js index 3ba5f6c..e061eac 100644 --- a/scripts/A6DcKPzAGntzSCil.js +++ b/scripts/A6DcKPzAGntzSCil.js @@ -1,5 +1,5 @@ let roll = await new Roll("1d10").roll() -roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`})); +roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`})); this.effect.updateSource({"duration.rounds" : roll.total}) \ No newline at end of file diff --git a/scripts/ACgKpKrEEHoNGG0h.js b/scripts/ACgKpKrEEHoNGG0h.js index 5d7289c..ba1d9d6 100644 --- a/scripts/ACgKpKrEEHoNGG0h.js +++ b/scripts/ACgKpKrEEHoNGG0h.js @@ -1 +1 @@ -return !args.skill?.name.includes("Channelling") && args.type != "channelling" \ No newline at end of file +return !args.skill?.name.includes("Focalisation") && args.type != "channelling" \ No newline at end of file diff --git a/scripts/ACtDCTLZXmd5uXjX.js b/scripts/ACtDCTLZXmd5uXjX.js index 205ea6b..903591c 100644 --- a/scripts/ACtDCTLZXmd5uXjX.js +++ b/scripts/ACtDCTLZXmd5uXjX.js @@ -1,7 +1,7 @@ let halve; if (args.opposedTest.attackerTest.item?.type != "spell") { - halve = await Dialog.confirm({title : this.effect.name, content : "Halve Damage? (Halves all damage other than fire, cold, and magic)"}) + halve = await Dialog.confirm({title : this.effect.name, content : "Diviser les dommages? (Divise par 2 tout les dommages autre que ceux causés par le feu, le froid et magiques)"}) } else { @@ -11,5 +11,5 @@ else if (halve) { args.totalWoundLoss /= 2; - args.modifiers.other.push({label : this.effect.name, details : "Halved", value : "× 0.5"}) + args.modifiers.other.push({label : this.effect.name, details : "Divisé par 2", value : "× 0.5"}) } \ No newline at end of file diff --git a/scripts/AGD7zCyV4zruvnWu.js b/scripts/AGD7zCyV4zruvnWu.js index f7eb0f9..f55bee5 100644 --- a/scripts/AGD7zCyV4zruvnWu.js +++ b/scripts/AGD7zCyV4zruvnWu.js @@ -1 +1 @@ -return args.type != "cast" || !["death", "necromancy", "life", "light", "heavens"].includes(args.spell?.system.lore.value) \ No newline at end of file +return args.type != "cast" || !["mort", "nécromancie", "vie", "lumière", "cieux"].includes(args.spell?.system.lore.value) \ No newline at end of file diff --git a/scripts/AMI2wDJqsIZsoq1e.js b/scripts/AMI2wDJqsIZsoq1e.js index 26b30e4..f826c60 100644 --- a/scripts/AMI2wDJqsIZsoq1e.js +++ b/scripts/AMI2wDJqsIZsoq1e.js @@ -1,4 +1,4 @@ if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == "attacker") { - this.script.scriptMessage(`Emits a cloud of foul-smelling blackpowder. Enable the Fellowship Penalty Active Effect on @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Émet un nuage de poudre noire nauséabonde. Active l'effet Fellowship Penalty sur @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) } \ No newline at end of file diff --git a/scripts/AMxezwtYnWCF6Oza.js b/scripts/AMxezwtYnWCF6Oza.js index 6eb5509..5fad3df 100644 --- a/scripts/AMxezwtYnWCF6Oza.js +++ b/scripts/AMxezwtYnWCF6Oza.js @@ -1 +1 @@ -return args.skill?.name == "Ranged (Blackpowder)" \ No newline at end of file +return args.skill?.name == "Projectiles (Poudre noire)" \ No newline at end of file diff --git a/scripts/Adgs6Zs0FdefO6qx.js b/scripts/Adgs6Zs0FdefO6qx.js index dd41f6a..210f054 100644 --- a/scripts/Adgs6Zs0FdefO6qx.js +++ b/scripts/Adgs6Zs0FdefO6qx.js @@ -1,5 +1,5 @@ if (args.test.options.pilot && args.test.result.reversed) { args.test.data.result.SL = "+" + Math.min(1, Number(args.test.data.result.SL)) - args.test.result.other.push(`${this.effect.name}: SL limited to 1`) + args.test.result.other.push(`${this.effect.name}: DR limité à 1`) } \ No newline at end of file diff --git a/scripts/ApaLcUhuty3EzJoP.js b/scripts/ApaLcUhuty3EzJoP.js index da73508..ba42e39 100644 --- a/scripts/ApaLcUhuty3EzJoP.js +++ b/scripts/ApaLcUhuty3EzJoP.js @@ -3,4 +3,4 @@ let current = this.actor.status.fortune.value this.actor.update({"system.status.fortune.value" : fortunePoints + current}) -this.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`) \ No newline at end of file +this.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses points de Destin augmentés de ${current} à ${fortunePoints + current}`) \ No newline at end of file diff --git a/scripts/AqHLHp4kH6KULk3e.js b/scripts/AqHLHp4kH6KULk3e.js index d8b4d08..16b9c43 100644 --- a/scripts/AqHLHp4kH6KULk3e.js +++ b/scripts/AqHLHp4kH6KULk3e.js @@ -8,5 +8,5 @@ if (this.item.system.quantity.value) } else { - this.script.scriptNotification("None left!", "error") + this.script.scriptNotification("Aucun disponible!", "error") } \ No newline at end of file diff --git a/scripts/B950b0XnIUYCdVwu.js b/scripts/B950b0XnIUYCdVwu.js index 99daff7..8a61d3b 100644 --- a/scripts/B950b0XnIUYCdVwu.js +++ b/scripts/B950b0XnIUYCdVwu.js @@ -5,7 +5,7 @@ if (test.succeeded) { if (args.totalWoundLoss <= parseInt(test.result.SL)) { - args.abort = `${this.effect.name}: Attack deflected and reflected` + args.abort = `${this.effect.name}: Attaque détournée et renvoyée` } args.modifiers.other.push({label : this.effect.name, value : -1 * parseInt(test.result.SL)}) } \ No newline at end of file diff --git a/scripts/BD7bVTU2pVoRSRBe.js b/scripts/BD7bVTU2pVoRSRBe.js index f82d353..d34ed0a 100644 --- a/scripts/BD7bVTU2pVoRSRBe.js +++ b/scripts/BD7bVTU2pVoRSRBe.js @@ -3,13 +3,13 @@ let symptoms = { coughsandsneezes : "Coughs and Sneezes", fever : "Fever", flux : "Flux", - nausea : "Nausea" + nausea : "Nausée" } let roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll()) roll.toMessage(this.script.getChatData()); -let choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, "Choose Symptoms"); +let choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, "Choisissez les Symptomes"); if (choices.length) { diff --git a/scripts/BtyFhdGMKiMamGhM.js b/scripts/BtyFhdGMKiMamGhM.js index 62a927a..9f4b6b1 100644 --- a/scripts/BtyFhdGMKiMamGhM.js +++ b/scripts/BtyFhdGMKiMamGhM.js @@ -1,4 +1,4 @@ -let test = await args.actor.setupSkill("Dodge", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) +let test = await args.actor.setupSkill("Esquive", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) await test.roll(); let damage = parseInt(this.effect.sourceTest.result.SL) diff --git a/scripts/CHnaBPHk6HdFS512.js b/scripts/CHnaBPHk6HdFS512.js index 6e8536e..93dbc6d 100644 --- a/scripts/CHnaBPHk6HdFS512.js +++ b/scripts/CHnaBPHk6HdFS512.js @@ -1,6 +1,6 @@ let arm = await fromUuid("Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS"); let leg = await fromUuid("Compendium.wfrp4e-core.items.k00PimCWkff11IA0"); -let choice = await ItemDialog.create([arm, leg], 1, "Choose Limb") +let choice = await ItemDialog.create([arm, leg], 1, "Choisir le Membre") this.actor.createEmbeddedDocuments("Item", choice, {fromEffect: this.effect.id}) \ No newline at end of file diff --git a/scripts/CIxZYkHggBQ6EsHP.js b/scripts/CIxZYkHggBQ6EsHP.js index 8034dd7..d5c9c31 100644 --- a/scripts/CIxZYkHggBQ6EsHP.js +++ b/scripts/CIxZYkHggBQ6EsHP.js @@ -1,2 +1,2 @@ -this.script.scriptNotification("Effect Used"); +this.script.scriptNotification("Effet utilisé"); this.effect.delete(); \ No newline at end of file diff --git a/scripts/CW5Vlr57OaMkKJ8Q.js b/scripts/CW5Vlr57OaMkKJ8Q.js index 0d5a0a9..56db697 100644 --- a/scripts/CW5Vlr57OaMkKJ8Q.js +++ b/scripts/CW5Vlr57OaMkKJ8Q.js @@ -1,11 +1,11 @@ if (this.actor.system.status.advantage.value >= 3) { this.actor.modifyAdvantage(-3); - this.script.scriptNotification("Advantage Subtracted") + this.script.scriptNotification("Avantage soustrait") } else { - return this.script.scriptNotification("Not enough Advantage!", "error") + return this.script.scriptNotification("Pas assez d'Avantages!", "error") } let test = await this.actor.setupTrait(this.item) diff --git a/scripts/CWNGrg7se91RC95g.js b/scripts/CWNGrg7se91RC95g.js index 27d7518..ca54b5c 100644 --- a/scripts/CWNGrg7se91RC95g.js +++ b/scripts/CWNGrg7se91RC95g.js @@ -1,11 +1,11 @@ if (args.totalWoundLoss > 0) { args.opposedTest.result.other.push( - `@Corruption[minor]{Moderate Exposure to Corruption}` + `@Corruption[minor]{Exposition Mineure à la Corruption}` ) this.script.scriptMessage(`${this.effect.name}: - @Corruption[moderate]{Moderate Exposure to Corruption}
- ${args.actor.prototypeToken.name} must take an - Corruption (Moderate) Test`, + @Corruption[moderate]{Exposition Modérée à la Corruption}
+ ${args.actor.prototypeToken.name} doit réussir un + Test de Corruption (Modéré)`, {whisper: ChatMessage.getWhisperRecipients("GM")} ) } \ No newline at end of file diff --git a/scripts/CiFeduksZJ6PRulx.js b/scripts/CiFeduksZJ6PRulx.js index 8bb32b5..57463db 100644 --- a/scripts/CiFeduksZJ6PRulx.js +++ b/scripts/CiFeduksZJ6PRulx.js @@ -1 +1 @@ -return args.skill?.name == "Ride (Horse)" || (args.options.dodge && this.actor.isMounted); \ No newline at end of file +return args.skill?.name == "Chevaucher (Cheval)" || (args.options.dodge && this.actor.isMounted); \ No newline at end of file diff --git a/scripts/Cjj4iLkdY1NaZRCi.js b/scripts/Cjj4iLkdY1NaZRCi.js index 165854d..1bb4744 100644 --- a/scripts/Cjj4iLkdY1NaZRCi.js +++ b/scripts/Cjj4iLkdY1NaZRCi.js @@ -1,17 +1,17 @@ -if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes("Ranged"))) +if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes("Projectiles"))) { let choice = await Dialog.wait({ title: this.effect.name, - content: `

Apply damage with ${this.effect.name} to attacker?`, + content: `

Appliquer les dommages de ${this.effect.name} à l'attquant?`, buttons: { yes: { - label: "Yes", + label: "Oui", callback: () => { return true; } }, no: { - label: "No", + label: "Non", callback: () => { return false; } diff --git a/scripts/DHxUKY9LMyifFgCi.js b/scripts/DHxUKY9LMyifFgCi.js index a9beef0..f05e6f3 100644 --- a/scripts/DHxUKY9LMyifFgCi.js +++ b/scripts/DHxUKY9LMyifFgCi.js @@ -1 +1 @@ -return args.skill?.name == "Trade (Apothecary)" || args.skill?.name == "Trade (Alchemist)" \ No newline at end of file +return args.skill?.name == "Métier (Apothicaire)" || args.skill?.name == "Métier (Alchimiste)" \ No newline at end of file diff --git a/scripts/DVlZGbiuMIHEQOnM.js b/scripts/DVlZGbiuMIHEQOnM.js index 4395d41..9ecada3 100644 --- a/scripts/DVlZGbiuMIHEQOnM.js +++ b/scripts/DVlZGbiuMIHEQOnM.js @@ -4,7 +4,7 @@ if (this.actor.getFlag("wfrp4e", "isAttached")) await roll.toMessage(this.script.getChatData()); if (roll.total == 9 || roll.total == 10) { - this.script.scriptMessage(`${this.actor.name} attached to ${this.actor.getFlag("wfrp4e", "isAttached")} gorges and falls off.`) + this.script.scriptMessage(`${this.actor.name} attaché à ${this.actor.getFlag("wfrp4e", "isAttached")} tombe.`) await this.actor.unsetFlag("wfrp4e", "isAttached") } } \ No newline at end of file diff --git a/scripts/DWBxvzfWGcG7PVNP.js b/scripts/DWBxvzfWGcG7PVNP.js index 789e83f..d7e26ab 100644 --- a/scripts/DWBxvzfWGcG7PVNP.js +++ b/scripts/DWBxvzfWGcG7PVNP.js @@ -1,5 +1,5 @@ let letter = this.item.system.location.key[0]; // "l" or "r"; -this.item.updateSource({"system.location.key" : letter + "Finger"}) +this.item.updateSource({"system.location.key" : letter + "Doigt"}) // We want the location to be Right or Left Hand, but the key to be rFinger or lFinger \ No newline at end of file diff --git a/scripts/DmbWR9s5I8LHBwxB.js b/scripts/DmbWR9s5I8LHBwxB.js index 0875467..7b032b9 100644 --- a/scripts/DmbWR9s5I8LHBwxB.js +++ b/scripts/DmbWR9s5I8LHBwxB.js @@ -1,4 +1,4 @@ -let column = await ValueDialog.create("Select the column to roll on to determine Beast Head", "Select Column", "", ["Undivided", "Khorne", "Nurgle", "Slaanesh", "Tzeentch"]); +let column = await ValueDialog.create("Selectionnez la colonne pour déterminer la Tête de Bête", "Sélectionner la colonne", "", ["Undivided", "Khorne", "Nurgle", "Slaanesh", "Tzeentch"]); if (column) { diff --git a/scripts/DuM5l2Yb4bdvDeaG.js b/scripts/DuM5l2Yb4bdvDeaG.js index ddbd4db..bf15220 100644 --- a/scripts/DuM5l2Yb4bdvDeaG.js +++ b/scripts/DuM5l2Yb4bdvDeaG.js @@ -1 +1 @@ -return args.skill?.name != "Athletics" \ No newline at end of file +return args.skill?.name != "Athlétisme" \ No newline at end of file diff --git a/scripts/E1vUepgop09FF5wy.js b/scripts/E1vUepgop09FF5wy.js index 3da19b7..058587a 100644 --- a/scripts/E1vUepgop09FF5wy.js +++ b/scripts/E1vUepgop09FF5wy.js @@ -1,6 +1,6 @@ if (this.actor.system.status.advantage.value == 0) { - return this.script.scriptNotification("Not enough Advantage!", "error") + return this.script.scriptNotification("Pas assez d'Avantages!", "error") } let hatred = await fromUuid("Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0") @@ -8,15 +8,15 @@ let frenzy = await fromUuid("Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q" if (this.actor.system.status.advantage.value >= 3) { - this.script.scriptNotification(`Adding ${frenzy.name}`) + this.script.scriptNotification(`Ajout de ${frenzy.name}`) this.actor.setAdvantage(0) this.actor.createEmbeddedDocuments("Item", [frenzy]) } else if (this.actor.system.status.advantage.value >= 1) { let data = hatred.toObject(); - data.system.specification.value = "Close Combat opponents" - this.script.scriptNotification(`Adding ${hatred.name}`) + data.system.specification.value = "Combatants au corps à corps" + this.script.scriptNotification(`Ajout de ${hatred.name}`) this.actor.setAdvantage(0) this.actor.createEmbeddedDocuments("Item", [data]) } \ No newline at end of file diff --git a/scripts/EJObiSth3WdcJOXN.js b/scripts/EJObiSth3WdcJOXN.js index a98ecba..79bf488 100644 --- a/scripts/EJObiSth3WdcJOXN.js +++ b/scripts/EJObiSth3WdcJOXN.js @@ -1,5 +1,5 @@ if (args.test.characteristicKey == "wp" && args.test.failed && args.test.result.SL <= -3) { - this.script.scriptNotification("Adding Prone"); + this.script.scriptNotification("Ajout de A Terre"); this.actor.addCondition("prone") } \ No newline at end of file diff --git a/scripts/EJaBfqADqlo92Fx6.js b/scripts/EJaBfqADqlo92Fx6.js index 9fd2959..1902c51 100644 --- a/scripts/EJaBfqADqlo92Fx6.js +++ b/scripts/EJaBfqADqlo92Fx6.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO") let data = item.toObject(); -data.name += " (To Be Determined)" +data.name += " (A déterminer)" this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/ENGmwaItRXO5s0XY.js b/scripts/ENGmwaItRXO5s0XY.js index 0a79fa7..8d8a308 100644 --- a/scripts/ENGmwaItRXO5s0XY.js +++ b/scripts/ENGmwaItRXO5s0XY.js @@ -1,5 +1,5 @@ await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3) -this.script.scriptMessage(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`) +this.script.scriptMessage(`Soigne ${this.actor.system.characteristics.t.bonus * 3} Blessures`) this.actor.hasCondition("bleeding")?.delete() this.actor.hasCondition("fatigued")?.delete() diff --git a/scripts/ERxrWzSpw8qwxFVi.js b/scripts/ERxrWzSpw8qwxFVi.js index e0eaff5..6eb7ef4 100644 --- a/scripts/ERxrWzSpw8qwxFVi.js +++ b/scripts/ERxrWzSpw8qwxFVi.js @@ -1 +1 @@ -this.script.scriptNotification(`Cannot enter ${this.effect.name}!`); this.actor.addCondition("broken"); \ No newline at end of file +this.script.scriptNotification(`Ne peut entrer ${this.effect.name}!`); this.actor.addCondition("broken"); \ No newline at end of file diff --git a/scripts/EdTChmSouS0MSmk5.js b/scripts/EdTChmSouS0MSmk5.js index b5c9aed..a6566d8 100644 --- a/scripts/EdTChmSouS0MSmk5.js +++ b/scripts/EdTChmSouS0MSmk5.js @@ -2,9 +2,9 @@ let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, append await test.roll(); if (test.succeeded) { - this.script.scriptMessage("Can perform an Action or Move (choose one)") + this.script.scriptMessage("Peut effectuer une Action ou un Mouvement (en choisir un)") } else { - this.script.scriptMessage("Cannot perform an Action or Move this round") + this.script.scriptMessage("Ne peut pas effectuer d'Action ou de Mouvement ce round") } \ No newline at end of file diff --git a/scripts/EmmG49pMOPHRwDzR.js b/scripts/EmmG49pMOPHRwDzR.js index 8c92354..2c59128 100644 --- a/scripts/EmmG49pMOPHRwDzR.js +++ b/scripts/EmmG49pMOPHRwDzR.js @@ -1,8 +1,8 @@ let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10) if (args.test.isFumble && roll == 1 && !args.test.result.misfire) { - args.test.result.misfire = game.i18n.localize("Misfire") + " (Rolled 1)" + args.test.result.misfire = game.i18n.localize("Misfire") + " (Résultat 1)" args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage) } else if (args.test.isFumble && roll != 1) - args.test.result.other.push("Misfire Roll: " + roll) + args.test.result.other.push("Raté résultat: " + roll) diff --git a/scripts/FSqUqSByMiztYOQM.js b/scripts/FSqUqSByMiztYOQM.js index 5bf62e7..6d55901 100644 --- a/scripts/FSqUqSByMiztYOQM.js +++ b/scripts/FSqUqSByMiztYOQM.js @@ -1,2 +1,2 @@ if (args.totalWoundLoss > 0) - this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM") }) \ No newline at end of file + this.script.scriptMessage(`Infecté: ${args.actor.name} doit réussir un Test de Résistance Facile (+40) ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM") }) \ No newline at end of file diff --git a/scripts/FXuyiJoXdAh6WhRK.js b/scripts/FXuyiJoXdAh6WhRK.js index 6e7b684..dc55d15 100644 --- a/scripts/FXuyiJoXdAh6WhRK.js +++ b/scripts/FXuyiJoXdAh6WhRK.js @@ -1 +1 @@ -return args.skill?.name == "Ride (Horse)" && game.combat?.active \ No newline at end of file +return args.skill?.name == "Chevaucher (Cheval)" && game.combat?.active \ No newline at end of file diff --git a/scripts/FZFOC7bip0oiWEzk.js b/scripts/FZFOC7bip0oiWEzk.js index 11e7cfd..9886f41 100644 --- a/scripts/FZFOC7bip0oiWEzk.js +++ b/scripts/FZFOC7bip0oiWEzk.js @@ -1,5 +1,5 @@ if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0) { args.actor.addCondition("bleeding", 2); - this.script.scriptNotification("Added Bleeding") + this.script.scriptNotification("Ajout d'Hémorragie") } \ No newline at end of file diff --git a/scripts/FiD3mvWIBHNNIuO9.js b/scripts/FiD3mvWIBHNNIuO9.js index f9fadbe..6c38499 100644 --- a/scripts/FiD3mvWIBHNNIuO9.js +++ b/scripts/FiD3mvWIBHNNIuO9.js @@ -3,6 +3,6 @@ if (args.opposedTest.result.hitloc.value == "body") if ((await new Roll("1d2").roll()).total == 1) { args.opposedTest.result.hitloc.value = "head" - this.script.scriptMessage(`Hit location changed to Head`) + this.script.scriptMessage(`Localisation changée : Tête`) } } \ No newline at end of file diff --git a/scripts/FqevMs0ukQ9WuUHl.js b/scripts/FqevMs0ukQ9WuUHl.js index d352c76..3c05bd9 100644 --- a/scripts/FqevMs0ukQ9WuUHl.js +++ b/scripts/FqevMs0ukQ9WuUHl.js @@ -5,5 +5,5 @@ if (this.item.getFlag("wfrp4e", "brittle")) { ChatMessage.create({content: `${this.item.name} shatters!`}) - this.item.update({name : `${this.item.name} (Shattered)`}) + this.item.update({name : `${this.item.name} (Brisé)`}) } \ No newline at end of file diff --git a/scripts/Fvlc4RkeF4dHjW3m.js b/scripts/Fvlc4RkeF4dHjW3m.js index 1fc9418..7b1ea9e 100644 --- a/scripts/Fvlc4RkeF4dHjW3m.js +++ b/scripts/Fvlc4RkeF4dHjW3m.js @@ -9,7 +9,7 @@ if (caster && (this.actor.has(game.i18n.localize("NAME.Undead")) || this.actor.h else { fromUuid("Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl").then(item => { this.actor.createEmbeddedDocuments("Item", [item.toObject()], { fromEffect: this.effect.id }) - ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } }) + ChatMessage.create({ content: `Ajout de Instable à ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } }) }) } } diff --git a/scripts/G7sFEnJlXZvfXL3V.js b/scripts/G7sFEnJlXZvfXL3V.js index 758b802..fe20e58 100644 --- a/scripts/G7sFEnJlXZvfXL3V.js +++ b/scripts/G7sFEnJlXZvfXL3V.js @@ -8,5 +8,5 @@ if (this.item.system.quantity.value) } else { - this.script.scriptNotification("None left!", "error") + this.script.scriptNotification("Aucun restant!", "error") } \ No newline at end of file diff --git a/scripts/GOq4TcnWbfyfCo2V.js b/scripts/GOq4TcnWbfyfCo2V.js index 3a51404..72c7243 100644 --- a/scripts/GOq4TcnWbfyfCo2V.js +++ b/scripts/GOq4TcnWbfyfCo2V.js @@ -1,7 +1,7 @@ this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`) await this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2) -let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : "difficult"}}) +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - Effets secondaires`,fields : {difficulty : "difficult"}}) await test.roll(); if (test.failed) { diff --git a/scripts/GRfCxtYzmEx2LYU7.js b/scripts/GRfCxtYzmEx2LYU7.js index dcc7340..81769f5 100644 --- a/scripts/GRfCxtYzmEx2LYU7.js +++ b/scripts/GRfCxtYzmEx2LYU7.js @@ -4,6 +4,6 @@ if (args.totalWoundLoss >= 1) await roll.toMessage(this.script.getChatData()); if (roll.total == 9) { - this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Deux @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Horreurs Bleues de Tzeentch} sortent de la chair hurlante de ${this.actor.name}, le tuant au passage.`, {whisper : ChatMessage.getWhisperRecipients("GM")}) } } \ No newline at end of file diff --git a/scripts/GjkxWj9wCAclM9WA.js b/scripts/GjkxWj9wCAclM9WA.js index 6fefe6d..d57eb59 100644 --- a/scripts/GjkxWj9wCAclM9WA.js +++ b/scripts/GjkxWj9wCAclM9WA.js @@ -4,9 +4,9 @@ effects.splice(effects.length - 1); if (effects.length == 0) { - return this.script.scriptNotification("All Effects have been used. Reset to select them again") + return this.script.scriptNotification("Tous les effets ont été utilisés. Les remettre à 0 pour les utiliser à nouveau") } -let choice = await ItemDialog.create(effects, 1, "Choose Power to Gain"); +let choice = await ItemDialog.create(effects, 1, "Choisissez le Pouvoir à gagner"); if (choice[0]) { diff --git a/scripts/GzSFlqL1YrIK1dxh.js b/scripts/GzSFlqL1YrIK1dxh.js index 1f5a252..77201c3 100644 --- a/scripts/GzSFlqL1YrIK1dxh.js +++ b/scripts/GzSFlqL1YrIK1dxh.js @@ -7,7 +7,7 @@ let items = await Promise.all(["Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7O "Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5", "Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg"].map(fromUuid)); -let choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, "Select Wind") +let choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, "Sélectionner le Vent") //this.actor.createEmbeddedDocuments("Item", items); this.item.update(choice[0]?.toObject(), {diff: false, recursive : false}); diff --git a/scripts/GzsuEg7gZy1f0ljy.js b/scripts/GzsuEg7gZy1f0ljy.js index 3220372..48f3dfe 100644 --- a/scripts/GzsuEg7gZy1f0ljy.js +++ b/scripts/GzsuEg7gZy1f0ljy.js @@ -1,10 +1,10 @@ let bleeding = this.actor.hasCondition("bleeding") if (bleeding) { - this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`) + this.script.scriptNotification(`Suppression de ${bleeding.conditionValue} états Hémorragiques`) bleeding.delete(); } else { - this.script.scriptNotification(`No Bleeding Conditions`) + this.script.scriptNotification(`Aucune Hémorragie`) } \ No newline at end of file diff --git a/scripts/H06Ysj7oPiemW7S6.js b/scripts/H06Ysj7oPiemW7S6.js index 8c3872b..518fffb 100644 --- a/scripts/H06Ysj7oPiemW7S6.js +++ b/scripts/H06Ysj7oPiemW7S6.js @@ -14,5 +14,5 @@ if (args.test.options.income && !args.test.options.criminal) let moneyString = `${moneyEarned}${coin}` let transactionString = `${moneyEarned}${term}` - this.script.scriptMessage(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Gain d'un supplément de ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients("GM")}) } \ No newline at end of file diff --git a/scripts/H2CJvApKMnfGNNoo.js b/scripts/H2CJvApKMnfGNNoo.js index 60892cb..39d38a9 100644 --- a/scripts/H2CJvApKMnfGNNoo.js +++ b/scripts/H2CJvApKMnfGNNoo.js @@ -1,6 +1,6 @@ if (args.test.item?.type == "skill" && args.test.item.name.includes(game.i18n.localize("NAME.Stealth"))) { - args.test.result.description = "Astounding Failure"; + args.test.result.description = "Echech Stupéfiant"; args.test.result.outcome = "failure"; ChatMessage.create({content : "SQUEAK", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true}) AudioHelper.play({ src: `${game.settings.get("wfrp4e", "soundPath")}squeek.wav` }, true); diff --git a/scripts/H3pZ9UeIzIz3luKh.js b/scripts/H3pZ9UeIzIz3luKh.js index c120317..70f99c0 100644 --- a/scripts/H3pZ9UeIzIz3luKh.js +++ b/scripts/H3pZ9UeIzIz3luKh.js @@ -2,4 +2,4 @@ args.actor.addCondition("bleeding") this.actor.setFlag("wfrp4e", "isAttached", args.actor.name) -this.script.scriptMessage(`Attaches to ${args.actor.name}`) \ No newline at end of file +this.script.scriptMessage(`Affecté à ${args.actor.name}`) \ No newline at end of file diff --git a/scripts/HASsi6wYHVALExWq.js b/scripts/HASsi6wYHVALExWq.js index 93a5c23..7b94541 100644 --- a/scripts/HASsi6wYHVALExWq.js +++ b/scripts/HASsi6wYHVALExWq.js @@ -1,13 +1,13 @@ -let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: "1 Corruption Point Gained" } }) +let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: "1 Point de Corruption Point gagné" } }) await test.roll(); if (test.failed && args.actor.type == "character") { let msg = "" - msg += `

${this.actor.prototypeToken.name} gained a Corruption point

` + msg += `

${this.actor.prototypeToken.name} gagne 1 Point de Corruption

` if (test.result.roll % 11 == 0 || test.result.roll == 100) { - msg += `${args.actor.prototypeToken.name} gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}` + msg += `${args.actor.prototypeToken.name} gagne une mutation (@Table[expandedmutatephys]{Physique} ou @Table[expandedmutatemental]{Mentale}) et gagne @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Magie du Chaos (Tzeentch)}` } this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients("GM")}) await this.actor.update({ "system.status.corruption.value": parseInt(args.actor.status.corruption.value) + 1 }) diff --git a/scripts/Hcpn1gU58DIKIhty.js b/scripts/Hcpn1gU58DIKIhty.js index 6d5917a..2ae5ada 100644 --- a/scripts/Hcpn1gU58DIKIhty.js +++ b/scripts/Hcpn1gU58DIKIhty.js @@ -1,4 +1,4 @@ -if (args.item.type == "skill" && args.item.name == "Melee (Flail)") +if (args.item.type == "skill" && args.item.name == "Corps à corps (Fléau)") { args.item.system.modifier.value += 10; } \ No newline at end of file diff --git a/scripts/a02tlRCXpaoaDjSN.js b/scripts/a02tlRCXpaoaDjSN.js index c70bd5f..77d5e55 100644 --- a/scripts/a02tlRCXpaoaDjSN.js +++ b/scripts/a02tlRCXpaoaDjSN.js @@ -5,7 +5,7 @@ careers.forEach(c => { c.id = c._id; } }); -let choice = await ItemDialog.create(careers, 1, "Choose Double Life Career"); +let choice = await ItemDialog.create(careers, 1, "Choisissez la carrière de votre double identité"); if (choice[0]) { let career = await fromUuid(choice[0].uuid); diff --git a/scripts/a4Aza4a9v8JMU8dC.js b/scripts/a4Aza4a9v8JMU8dC.js index 7ec136f..845cf2e 100644 --- a/scripts/a4Aza4a9v8JMU8dC.js +++ b/scripts/a4Aza4a9v8JMU8dC.js @@ -1,2 +1,2 @@ -const talents = await Promise.all(["Frenzy", "Magic Resistance"].map(game.wfrp4e.utility.findTalent)) +const talents = await Promise.all(["Frénésie", "Résistance à la Magie"].map(game.wfrp4e.utility.findTalent)) this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/a7pEvCycVnFBXGAQ.js b/scripts/a7pEvCycVnFBXGAQ.js index 604c31c..4249b18 100644 --- a/scripts/a7pEvCycVnFBXGAQ.js +++ b/scripts/a7pEvCycVnFBXGAQ.js @@ -1,4 +1,4 @@ -let test = await this.actor.setupCharacteristic("i", {skipTargets: true, appendTitle : " - Stunned", fields : {difficulty : "easy"}}) +let test = await this.actor.setupCharacteristic("i", {skipTargets: true, appendTitle : " - Assomé", fields : {difficulty : "easy"}}) await test.roll(); if (!test.succeeded) diff --git a/scripts/a8i0sA1RBnD8nHZt.js b/scripts/a8i0sA1RBnD8nHZt.js index b78fb2c..cfba899 100644 --- a/scripts/a8i0sA1RBnD8nHZt.js +++ b/scripts/a8i0sA1RBnD8nHZt.js @@ -32,11 +32,11 @@ for(let f in flaws) } } -let added = await ItemDialog.create(ItemDialog.objectToArray(qualities), "unlimited", "Choose Qualities to add"); +let added = await ItemDialog.create(ItemDialog.objectToArray(qualities), "unlimited", "Choisissez la Qualité à ajouter"); let removed = [] if (!foundry.utils.isEmpty(flaws)) { - removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), "unlimited", "Choose Flaws to remove"); + removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), "unlimited", "Choisissez le Défaut à enlever"); } this.effect.updateSource({"flags.wfrp4e.propertiesChanged" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}}) diff --git a/scripts/aCVtaW8ag1WibcAr.js b/scripts/aCVtaW8ag1WibcAr.js index bf9b92d..909f231 100644 --- a/scripts/aCVtaW8ag1WibcAr.js +++ b/scripts/aCVtaW8ag1WibcAr.js @@ -1,2 +1,2 @@ args.attacker.modifyWounds(1) -this.script.scriptMessage(`${args.attacker.prototypeToken.name} recovers 1 Wound.`) \ No newline at end of file +this.script.scriptMessage(`${args.attacker.prototypeToken.name} récupère 1 Blessure.`) \ No newline at end of file diff --git a/scripts/abLWYtNTu1UVDQAs.js b/scripts/abLWYtNTu1UVDQAs.js index 547de25..68c5009 100644 --- a/scripts/abLWYtNTu1UVDQAs.js +++ b/scripts/abLWYtNTu1UVDQAs.js @@ -1,5 +1,5 @@ if (args.opposedTest.result.hitloc.value == this.effect.flags.wfrp4e.location) // e.g. 'head', rLeg, 'lArm' { - this.scriptMessage(`Gains a @Condition[Blinded] condition as their ${this.item.name} was hit`); + this.scriptMessage(`Reçoit l'état @Condition[Aveuglé] comme ${this.item.name} a été touché`); this.actor.addCondition("blinded"); } \ No newline at end of file diff --git a/scripts/b2Kb4IuD22RhKhR0.js b/scripts/b2Kb4IuD22RhKhR0.js index fcbecf9..cd7e0ff 100644 --- a/scripts/b2Kb4IuD22RhKhR0.js +++ b/scripts/b2Kb4IuD22RhKhR0.js @@ -6,5 +6,5 @@ if (actor) } else { - this.script.scriptNotification("No target!", "error") + this.script.scriptNotification("Aucune cible!", "error") } \ No newline at end of file diff --git a/scripts/bEVlJOOA1kLlzpWx.js b/scripts/bEVlJOOA1kLlzpWx.js index 4a07c15..be16fd4 100644 --- a/scripts/bEVlJOOA1kLlzpWx.js +++ b/scripts/bEVlJOOA1kLlzpWx.js @@ -10,10 +10,10 @@ let characteristics = { "wp" : 30, "fel" : 10 } -let skills = ["Channelling", "Cool", "Dodge", "Entertain (Storytelling)", "Intuition", "Language (Magick)", "Leadership", "Lore (Magic)", "Lore (Theology)", "Perception"] +let skills = ["Focalisation", "Calme", "Esquive", "Divertissement (Narration)", "Intuition", "Langue (Magick)", "Commandement", "Savoir (Magic)", "Lore (Theologie)", "Perception"] let skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30] -let talents = ["Aethyric Attunement", "Arcane Magic", "Instinctive Diction", "Instinctive Diction", "Luck", "Magical Sense", "Menacing", "Petty Magic", "Second Sight", "Sixth Sense"] -let trappings = ["Hand Weapon", "Quarterstaff", "Ritual Dress incorporating many ingredients and fetishes"] +let talents = ["Harmonisation Aethyrique", "Magie des Arcanes (Domaine)", "Diction instinctive", "Diction instinctive", "Chance", "Sens de la Magie", "Menaçant", "Magie Mineure", "Seconde Vue", "Sixième sens"] +let trappings = ["Arme simple", "(2M) Bâton de combat", "Robe de rituel incorporant de nombreux ingrédients et fétiches"] let items = []; let updateObj = this.actor.toObject(); @@ -48,7 +48,7 @@ for (let talent of talents) } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } diff --git a/scripts/bLkt8VpTTPoTxW0W.js b/scripts/bLkt8VpTTPoTxW0W.js index 73567e8..97a1d9c 100644 --- a/scripts/bLkt8VpTTPoTxW0W.js +++ b/scripts/bLkt8VpTTPoTxW0W.js @@ -1,5 +1,5 @@ if (args.opposedTest.result.hitloc.value == "body" && args.totalWoundLoss > 0) { args.actor.addCondition("bleeding", 1); - this.script.scriptNotification("Added Bleeding") + this.script.scriptNotification("Ajout d'Hémorragie") } diff --git a/scripts/bMEFHPCei2evnZZw.js b/scripts/bMEFHPCei2evnZZw.js index 7eb94d5..c362d32 100644 --- a/scripts/bMEFHPCei2evnZZw.js +++ b/scripts/bMEFHPCei2evnZZw.js @@ -9,6 +9,6 @@ if (args.totalWoundLoss > 0) args.actor.addCondition("poisoned") this.script.scriptMessage(` ${this.effect.name}:
- ${args.actor.name} has been given a @Condition[Poisoned] Condition, which can be resisted with a Difficult (-10) Endurance Test.`, + ${args.actor.name} reçoit un état @Condition[Empoisonné], qui peut être résisté avec un Test de Résistance Difficile (-10).`, {whisper: ChatMessage.getWhisperRecipients("GM")}) } diff --git a/scripts/btPrQkGRKUkhNe3N.js b/scripts/btPrQkGRKUkhNe3N.js index 8c320ab..59219d5 100644 --- a/scripts/btPrQkGRKUkhNe3N.js +++ b/scripts/btPrQkGRKUkhNe3N.js @@ -1 +1 @@ -return args.skill?.name == "Trade (Apothecary)" \ No newline at end of file +return args.skill?.name == "Métier (Apothicaire)" \ No newline at end of file diff --git a/scripts/cK1Jysfu5IMUUH0C.js b/scripts/cK1Jysfu5IMUUH0C.js index 7c148b7..dde1591 100644 --- a/scripts/cK1Jysfu5IMUUH0C.js +++ b/scripts/cK1Jysfu5IMUUH0C.js @@ -4,7 +4,7 @@ if (!args.ward) if (args.wardRoll >= args.ward && args.ward > 3) { let newWard = Math.max(3, args.ward - 1) - this.script.scriptMessage("Ward improved to " + newWard) + this.script.scriptMessage("Protection améliorée de " + newWard) this.effect.setFlag("wfrp4e", "ward", newWard) } diff --git a/scripts/cUnbADgOQ4fMKgrH.js b/scripts/cUnbADgOQ4fMKgrH.js index 75b0494..8f5aeb8 100644 --- a/scripts/cUnbADgOQ4fMKgrH.js +++ b/scripts/cUnbADgOQ4fMKgrH.js @@ -9,7 +9,7 @@ if (this.item.name.includes("(")) else { - group = await ValueDialog.create("Enter Hatred Group", "Hatred Group") + group = await ValueDialog.create("Choisir le groupe haï", "Groupe Haï") this.item.updateSource({name : this.item.name + ` (${group})`, "system.tests.value" : this.item.system.tests.value.replace("Group", group)}) this.effect.updateSource({name : this.effect.name + ` (${group})`}) diff --git a/scripts/chUpiI3el8IO8MSs.js b/scripts/chUpiI3el8IO8MSs.js index 714ea80..94a9fa2 100644 --- a/scripts/chUpiI3el8IO8MSs.js +++ b/scripts/chUpiI3el8IO8MSs.js @@ -1,6 +1,6 @@ -if (args.opposedTest.attackerTest.item?.name.includes("Bite")) +if (args.opposedTest.attackerTest.item?.name.includes("Morsure")) { let woundsGained = args.totalWoundLoss; - this.script.scriptMessage(`Gains ${woundsGained} Wounds`, { whisper: ChatMessage.getWhisperRecipients("GM") }) + this.script.scriptMessage(`Récupère ${woundsGained} Blessures`, { whisper: ChatMessage.getWhisperRecipients("GM") }) this.actor.modifyWounds(woundsGained) } \ No newline at end of file diff --git a/scripts/dIxYt421K010eogY.js b/scripts/dIxYt421K010eogY.js index b628745..df350bf 100644 --- a/scripts/dIxYt421K010eogY.js +++ b/scripts/dIxYt421K010eogY.js @@ -1,6 +1,6 @@ let modifier = 0 - if (this.effect.name.includes("Moderate")) + if (this.effect.name.includes("Modéré")) modifier = -20 else modifier = -10 diff --git a/scripts/dM449AU0FQRnOc3l.js b/scripts/dM449AU0FQRnOc3l.js index 992c1e4..6fd5fd9 100644 --- a/scripts/dM449AU0FQRnOc3l.js +++ b/scripts/dM449AU0FQRnOc3l.js @@ -1,4 +1,4 @@ if (args.opposedTest.result.hitloc.value == "head") { - args.abort = "Missed - Headless" + args.abort = "Raté - Sans tête" } \ No newline at end of file diff --git a/scripts/dbOSvpgcPjsc2uvq.js b/scripts/dbOSvpgcPjsc2uvq.js index 38e71e9..b591df7 100644 --- a/scripts/dbOSvpgcPjsc2uvq.js +++ b/scripts/dbOSvpgcPjsc2uvq.js @@ -1,7 +1,7 @@ let menacing = (await fromUuid("Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD")).toObject(); let sense = (await fromUuid("Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS")).toObject(); -sense.name += " (Sight)"; -sense.system.tests.value = sense.system.tests.value.replace("Sense", "Sight") +sense.name += " (Vue)"; +sense.system.tests.value = sense.system.tests.value.replace("Sens", "Vue") this.actor.createEmbeddedDocuments("Item", [menacing, sense], {fromEffect : this.effect.id}) \ No newline at end of file diff --git a/scripts/dcwY8dCd3PNCEzk6.js b/scripts/dcwY8dCd3PNCEzk6.js index bba7d38..4b0b023 100644 --- a/scripts/dcwY8dCd3PNCEzk6.js +++ b/scripts/dcwY8dCd3PNCEzk6.js @@ -2,4 +2,4 @@ let current = this.actor.status.fate.value this.actor.update({"system.status.fate.value" : current + 1}) -this.script.scriptMessage(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`) \ No newline at end of file +this.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses Points de Destin augmentés de ${current} à ${current + 1}`) \ No newline at end of file diff --git a/scripts/dfEgat3jz4EtWszH.js b/scripts/dfEgat3jz4EtWszH.js index 91ff1ee..9e6bec5 100644 --- a/scripts/dfEgat3jz4EtWszH.js +++ b/scripts/dfEgat3jz4EtWszH.js @@ -1 +1 @@ -return args.skill?.name == "Stealth (Urban)" \ No newline at end of file +return args.skill?.name == "Discrétion (Urbaine)" \ No newline at end of file diff --git a/scripts/dtFvpY96RPzNnphq.js b/scripts/dtFvpY96RPzNnphq.js index 6e1fb69..3a5cf96 100644 --- a/scripts/dtFvpY96RPzNnphq.js +++ b/scripts/dtFvpY96RPzNnphq.js @@ -1 +1 @@ -return !(args.skill?.name.includes("Melee (Basic)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic")) \ No newline at end of file +return !(args.skill?.name.includes("Corps à corps (Base)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic")) \ No newline at end of file diff --git a/scripts/dwSgcFxKN3S0hLJL.js b/scripts/dwSgcFxKN3S0hLJL.js index 334b361..b575b9b 100644 --- a/scripts/dwSgcFxKN3S0hLJL.js +++ b/scripts/dwSgcFxKN3S0hLJL.js @@ -1 +1 @@ -return args.skill?.name != "Melee (Brawling)" && args.item?.weaponGroup?.value != "brawling" \ No newline at end of file +return args.skill?.name != "Corps à corps (Bagarre)" && args.item?.weaponGroup?.value != "brawling" \ No newline at end of file diff --git a/scripts/e34s1XxHckAWfwHt.js b/scripts/e34s1XxHckAWfwHt.js index bfcbd7c..76f2e83 100644 --- a/scripts/e34s1XxHckAWfwHt.js +++ b/scripts/e34s1XxHckAWfwHt.js @@ -1,4 +1,4 @@ if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target)) { - args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`) + args.test.result.other.push(`${this.effect.name}: L'opposant perd ${Number(args.test.result.SL) + 1} Avantage`) } \ No newline at end of file diff --git a/scripts/e7IxnxePdXSy6L4E.js b/scripts/e7IxnxePdXSy6L4E.js index 59daaf1..5026e54 100644 --- a/scripts/e7IxnxePdXSy6L4E.js +++ b/scripts/e7IxnxePdXSy6L4E.js @@ -1,4 +1,4 @@ if (args.opposedTest.result.hitloc.value == "head") { - this.script.scriptMessage(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`) + this.script.scriptMessage(`${this.actor.prototypeToken.name} subit une @Table[crithead]{Blessure Critique} si il n'y en avait pas d'autres.`) } \ No newline at end of file diff --git a/scripts/ePPgxQOqL1Uhz2k9.js b/scripts/ePPgxQOqL1Uhz2k9.js index e0e5035..8ded4d7 100644 --- a/scripts/ePPgxQOqL1Uhz2k9.js +++ b/scripts/ePPgxQOqL1Uhz2k9.js @@ -1,7 +1,7 @@ let choice1 = [ { type : "skill", - name : "Ranged (Bow)", + name : "Projectiles (Arc)", diff : { system : { advances : { @@ -12,11 +12,11 @@ let choice1 = [ }, { type : "weapon", - name : "Bow", + name : "Arc", }, { type : "ammunition", - name : "Arrow", + name : "Flèche", } ] let choice2 = [ @@ -26,21 +26,21 @@ let choice = await Dialog.wait({ title : "Option", content : `

- Add Option? + Ajouter une Option?

    -
  1. Ranged (Bow) +10 and a Bow with 12 Arrows
  2. +
  3. Projectiles (Arc) +10 et un arc avec 12 Flèches
`, buttons : { 1 : { - label : "Yes", + label : "Oui", callback : () => { return choice1 } }, 2 : { - label : "No", + label : "Non", callback : () => { choice2 } @@ -72,7 +72,7 @@ for (let c of choice) items.push(mergeObject(item, (c.diff || {}))) } else - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } diff --git a/scripts/ebDQH0MdGAG02CHl.js b/scripts/ebDQH0MdGAG02CHl.js index 94a3b0e..49e36d3 100644 --- a/scripts/ebDQH0MdGAG02CHl.js +++ b/scripts/ebDQH0MdGAG02CHl.js @@ -3,12 +3,12 @@ let data = item.toObject(); data.system.location.key = this.item.system.location.key if (this.item.system.location.key == "rArm") { - data.system.location.value = "Right Hand" + data.system.location.value = "Main Droite" data.system.location.key = "rHand" } else if (this.item.system.location.key == "lArm") { - data.system.location.value = "Left Hand" + data.system.location.value = "Main Gauche" data.system.location.key = "lHand" } this.actor.createEmbeddedDocuments("Item", [data]) \ No newline at end of file diff --git a/scripts/ed7Sud9HM3uB2j6b.js b/scripts/ed7Sud9HM3uB2j6b.js index c2a8e1a..092513b 100644 --- a/scripts/ed7Sud9HM3uB2j6b.js +++ b/scripts/ed7Sud9HM3uB2j6b.js @@ -1,7 +1,7 @@ -ChatMessage.create({content : "Yield or die!", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true}) +ChatMessage.create({content : "Céder ou Mourir!", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true}) let item = await fromUuid("Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn") let data = item.toObject(); data.system.specification.value = 2; -this.script.scriptNotification("Adding " + data.name); +this.script.scriptNotification("Ajout de " + data.name); await this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}); game.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name) \ No newline at end of file diff --git a/scripts/egDtqMxe3iekc6hv.js b/scripts/egDtqMxe3iekc6hv.js index d5db90a..d73942d 100644 --- a/scripts/egDtqMxe3iekc6hv.js +++ b/scripts/egDtqMxe3iekc6hv.js @@ -1,6 +1,6 @@ let trait = args.opposedTest.attackerTest.item let woundLossEffect = this.item.effects.get("7Amhi75wLv0PvGjd") -if (trait && trait.name.includes("Bite") && woundLossEffect) +if (trait && trait.name.includes("Morsure") && woundLossEffect) { args.actor.applyEffect({effectUuids : woundLossEffect.uuid}) } \ No newline at end of file diff --git a/scripts/eh1J3s0s4A2AxoFp.js b/scripts/eh1J3s0s4A2AxoFp.js index 1ff8cb1..4d99aad 100644 --- a/scripts/eh1J3s0s4A2AxoFp.js +++ b/scripts/eh1J3s0s4A2AxoFp.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG"); let data = item.toObject(); -data.name += " (Enemy)"; +data.name += " (Ennemi)"; this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) \ No newline at end of file diff --git a/scripts/ekjJQHyMbZT2vqdc.js b/scripts/ekjJQHyMbZT2vqdc.js index 064db13..5295446 100644 --- a/scripts/ekjJQHyMbZT2vqdc.js +++ b/scripts/ekjJQHyMbZT2vqdc.js @@ -1,9 +1,9 @@ let uses = this.item.getFlag("wfrp4e", "uses") || 0; uses++; -this.script.scriptNotification(`Used ${uses} times`) +this.script.scriptNotification(`Utilisé ${uses} fois`) this.item.setFlag("wfrp4e", "uses", uses); if (uses >= 3) { this.effect.update({"flags.wfrp4e.applicationData.type" : "other"}) - this.script.scriptNotification(`Used up`); + this.script.scriptNotification(`Utilisé`); } diff --git a/scripts/eqxE7nBO13yJS7hc.js b/scripts/eqxE7nBO13yJS7hc.js index f1c6ed6..39c1e60 100644 --- a/scripts/eqxE7nBO13yJS7hc.js +++ b/scripts/eqxE7nBO13yJS7hc.js @@ -1,5 +1,5 @@ let roll = (await new Roll("1d10").roll()) -roll.toMessage({flavor: "Wounds Healed", speaker : {alias : this.actor.name}}) +roll.toMessage({flavor: " Blessures soignées", speaker : {alias : this.actor.name}}) this.actor.modifyWounds(roll.total) diff --git a/scripts/ezGqDoC9hNRBnFTB.js b/scripts/ezGqDoC9hNRBnFTB.js index 9538a95..6bb8320 100644 --- a/scripts/ezGqDoC9hNRBnFTB.js +++ b/scripts/ezGqDoC9hNRBnFTB.js @@ -1,5 +1,5 @@ let choices = await Promise.all([game.wfrp4e.utility.findItemId("1zaqojk0Oq1m8vYv"), game.wfrp4e.utility.findItemId("zIuarD5mB0EF0ji0")]) - let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choose a Weapon") + let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choisir une arme") items = items.map(i => i.toObject()) items.forEach(i => equip(i)) diff --git a/scripts/f062aa2BNClx08D6.js b/scripts/f062aa2BNClx08D6.js index c3cc2c8..892908e 100644 --- a/scripts/f062aa2BNClx08D6.js +++ b/scripts/f062aa2BNClx08D6.js @@ -7,7 +7,7 @@ let test = await args.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {sk let currentModifier = this.actor.characteristics.t.modifier await this.actor.update({ "system.characteristics.t.modifier": currentModifier - toughnessLost }) - this.script.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`) + this.script.scriptMessage(`${this.actor.prototypeToken.name} perd ${toughnessLost} points d'Endurance`) if (this.actor.system.characteristics.t.value <= 0) { this.actor.addCondition("dead"); diff --git a/scripts/f5Mp3kXwCFdPkW6N.js b/scripts/f5Mp3kXwCFdPkW6N.js index bd4edee..b50b369 100644 --- a/scripts/f5Mp3kXwCFdPkW6N.js +++ b/scripts/f5Mp3kXwCFdPkW6N.js @@ -1 +1 @@ -return args.skill?.name != "Entertain (Sing)" && args.skill?.name != "Entertain (Singing)" && !args.skill?.name.includes("Language"); \ No newline at end of file +return args.skill?.name != "Divertissement (Chant)" && args.skill?.name != "Divertissement (Chanter)" && !args.skill?.name.includes("Langue"); \ No newline at end of file diff --git a/scripts/fEFfHFeJxkR0aIJK.js b/scripts/fEFfHFeJxkR0aIJK.js index 7d20696..cb4c4d7 100644 --- a/scripts/fEFfHFeJxkR0aIJK.js +++ b/scripts/fEFfHFeJxkR0aIJK.js @@ -1,5 +1,5 @@ if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 3 && args.opposedTest.result.winner == "attacker") { - this.script.scriptMessage(`Everyone within 20 feet loses 1 Wound and makes a Difficult (-10) Endurance or gains @Condition[Deafened]`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Tous ceux dans un rayon de 7 mètres perde 1 Point de Blessure et doivent faire un Test de Résistance Difficile (-10) ou recevoir l'état gains @Condition[Assourdi]`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")}) } \ No newline at end of file diff --git a/scripts/fP2edYbj6QjPPAjL.js b/scripts/fP2edYbj6QjPPAjL.js index e1ac1b8..7578147 100644 --- a/scripts/fP2edYbj6QjPPAjL.js +++ b/scripts/fP2edYbj6QjPPAjL.js @@ -1 +1 @@ -return ["Charm Animal", "Endurance", "Outdoor Survival"].includes(args.skill?.name) \ No newline at end of file +return ["Emprise sur les animaux", "Résistance", "Survie en extérieur"].includes(args.skill?.name) \ No newline at end of file diff --git a/scripts/fYLSe6CrYciap5y8.js b/scripts/fYLSe6CrYciap5y8.js index 14685bc..2de7636 100644 --- a/scripts/fYLSe6CrYciap5y8.js +++ b/scripts/fYLSe6CrYciap5y8.js @@ -10,7 +10,7 @@ "wp" : 0, "fel" : 0 } - let skills = ["Consume Alcohol", "Row", "Sail", "Swim"] + let skills = ["Résistance à l'alcool", "Ramer", "Voile", "Natation"] let skillAdvancements = [10, 10, 10, 10] let talents = [] let trappings = [] @@ -48,7 +48,7 @@ } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } @@ -65,7 +65,7 @@ } else { - ui.notifications.warn(`Could not find ${trapping}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true}) } } diff --git a/scripts/feMPZhhFeXRtKdKY.js b/scripts/feMPZhhFeXRtKdKY.js index 73f5d95..38fff1f 100644 --- a/scripts/feMPZhhFeXRtKdKY.js +++ b/scripts/feMPZhhFeXRtKdKY.js @@ -6,5 +6,5 @@ if (this.item.system.quantity.value) } else { - this.script.scriptNotification("None left!", "error") + this.script.scriptNotification("Aucun restant!", "error") } \ No newline at end of file diff --git a/scripts/fiF9sM5UpcHMYa33.js b/scripts/fiF9sM5UpcHMYa33.js index 554998a..fbbe0fa 100644 --- a/scripts/fiF9sM5UpcHMYa33.js +++ b/scripts/fiF9sM5UpcHMYa33.js @@ -1,4 +1,4 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv"); let data = item.toObject(); -data.name += " (Poison, Disease, Chaos)" +data.name += " (Poison, Maladie, Chaos)" this.actor.createEmbeddedDocuments("Item", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect: this.effect.id}) \ No newline at end of file diff --git a/scripts/ft0LaRWZT5WtnptP.js b/scripts/ft0LaRWZT5WtnptP.js index 36ac1c9..4549c61 100644 --- a/scripts/ft0LaRWZT5WtnptP.js +++ b/scripts/ft0LaRWZT5WtnptP.js @@ -2,11 +2,11 @@ let advantage = this.actor.system.status.advantage.value; if (advantage > 0) { await this.actor.setAdvantage(0); - this.script.scriptNotification("Advantage Subtracted") + this.script.scriptNotification("Avantage soustrait") } else { - return this.script.scriptNotification("Not enough Advantage!", "error") + return this.script.scriptNotification("Pas assez d'Avantages!", "error") } let test = await this.actor.setupTrait(this.item, {fields : {slBonus : advantage}}) diff --git a/scripts/fzTB7t3x4bLmAXji.js b/scripts/fzTB7t3x4bLmAXji.js index e5d584e..d46ba03 100644 --- a/scripts/fzTB7t3x4bLmAXji.js +++ b/scripts/fzTB7t3x4bLmAXji.js @@ -1,5 +1,5 @@ let roll = await new Roll("1d10 + 1").roll() await roll.toMessage(this.script.getChatData()); -this.script.scriptNotification(`Healed ${roll.total} Wounds`) +this.script.scriptNotification(`Soins de ${roll.total} Blessures`) this.actor.corruptionDialog("moderate") await this.actor.modifyWounds(roll.total) \ No newline at end of file diff --git a/scripts/g07HI7vyqiFXPB0o.js b/scripts/g07HI7vyqiFXPB0o.js index 480115f..4bfe29a 100644 --- a/scripts/g07HI7vyqiFXPB0o.js +++ b/scripts/g07HI7vyqiFXPB0o.js @@ -5,8 +5,8 @@ await test.roll() if (test.failed) { this.actor.addCondition("poisoned", 2) - this.script.scriptMessage(`

${this.actor.prototypeToken.name} has gained 2 @Condition[Poisoned] Conditions.

-

Any being with the Bestial Creature Trait that bites them and takes damage will not bite them again during a hostile encounter, though the creature may still attack them in other ways.

`, + this.script.scriptMessage(`

${this.actor.prototypeToken.name} reçoit 2 états @Condition[Empoisonné].

+

Toute créature avec le Trait Bestial qui le mord et provoque des dégats ne le mordra pas à nouveau durant un combat, la créature pouvant toutefois attaquer avec d'autres méthodes si disponibles..

`, { whisper: ChatMessage.getWhisperRecipients("GM"), blind: true @@ -16,7 +16,7 @@ if (test.failed) else if (test.succeeded) { // Don't attempt to add Corrosive Blood if actor already has it - const hasCorrosiveBlood = this.actor.has("Corrosive Blood") + const hasCorrosiveBlood = this.actor.has("Sang corrosif") if (hasCorrosiveBlood !== undefined) return let item = await fromUuid("Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW") @@ -24,6 +24,6 @@ else if (test.succeeded) this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) const duration = 3 + parseInt(test.result.SL) - this.script.scriptMessage(`

${this.actor.prototypeToken.name} gains the Corrosive Blood Trait for ${duration} rounds.

`, + this.script.scriptMessage(`

${this.actor.prototypeToken.name} gagne le Trait Sang Corrosif pour ${duration} rounds.

`, { whisper: ChatMessage.getWhisperRecipients("GM"), blind: true }) } \ No newline at end of file diff --git a/scripts/g0SzfsLyW7aD2F19.js b/scripts/g0SzfsLyW7aD2F19.js index e319818..bd0cd04 100644 --- a/scripts/g0SzfsLyW7aD2F19.js +++ b/scripts/g0SzfsLyW7aD2F19.js @@ -1,4 +1,4 @@ -if (this.item.name.includes("(") && this.item.system.tests.value.includes("(Social Group)")) +if (this.item.name.includes("(") && this.item.system.tests.value.includes("(Groupe Social)")) { let tests = this.item.system.tests.value let name = this.item.name diff --git a/scripts/gKIPujyuFSn0No9v.js b/scripts/gKIPujyuFSn0No9v.js index 9359298..977eee5 100644 --- a/scripts/gKIPujyuFSn0No9v.js +++ b/scripts/gKIPujyuFSn0No9v.js @@ -2,4 +2,4 @@ for(let e of this.item.effects.contents) { e.update({disabled: false}) } -this.script.scriptNotification("Reset Powers") \ No newline at end of file +this.script.scriptNotification("Ré-initialiser les pouvoirs") \ No newline at end of file diff --git a/scripts/gKPL3t4vlZAsvtGr.js b/scripts/gKPL3t4vlZAsvtGr.js index c2422ee..6e060db 100644 --- a/scripts/gKPL3t4vlZAsvtGr.js +++ b/scripts/gKPL3t4vlZAsvtGr.js @@ -1 +1 @@ -return args.skill?.name == "Stealth (Underground)" \ No newline at end of file +return args.skill?.name == "Discrétion (Souterrains)" \ No newline at end of file diff --git a/scripts/h766UvswLCsxcMow.js b/scripts/h766UvswLCsxcMow.js index cc4d0c0..1a41352 100644 --- a/scripts/h766UvswLCsxcMow.js +++ b/scripts/h766UvswLCsxcMow.js @@ -10,10 +10,10 @@ let characteristics = { "wp" : 10, "fel" : 10 } -let skills = ["Charm", "Intimidate", "Melee (Basic)"] +let skills = ["Charme", "Intimidation", "Corps à corps (Base)"] let skillAdvancements = [7, 60, 7] -let talents = ["Menacing", "Shadow"] -let traits = ["Distracting"] +let talents = ["Menaçant", "Discret"] +let traits = ["Perturbant"] let trappings = [] let items = []; let spells = []; @@ -50,7 +50,7 @@ for (let talent of talents) } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } @@ -68,13 +68,13 @@ for (let trait of traits) } catch { } if (!traitItem) { - ui.notifications.warn(`Could not find ${trait}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true}) } traitItem = traitItem.toObject() if (Number.isNumeric(traitVal)) { - traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal; + traitItem.system.specification.value = traitName.includes('Arme','Cornes','Queue','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal; traitItem.name = (traitItem.name + ` ${traitSpec ? "("+ traitSpec + ")" : ""}`).trim() } else @@ -97,7 +97,7 @@ for (let trapping of trappings) } else { - ui.notifications.warn(`Could not find ${trapping}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true}) } } @@ -112,7 +112,7 @@ for (let spell of spells) } else { - ui.notifications.warn(`Could not find ${spell}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${spell}`, {permanent : true}) } } diff --git a/scripts/hA8PzeiCsHqqlUZm.js b/scripts/hA8PzeiCsHqqlUZm.js index c8e212a..eadf74b 100644 --- a/scripts/hA8PzeiCsHqqlUZm.js +++ b/scripts/hA8PzeiCsHqqlUZm.js @@ -1,2 +1,2 @@ this.actor.createEmbeddedDocuments("ActiveEffect", [game.wfrp4e.config.symptomEffects["nausea"]]) -this.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients("GM")}) \ No newline at end of file +this.script.scriptMessage(`Gaine de @Condition[Nausée] pour [[1d10]] heures`, {whisper: ChatMessage.getWhisperRecipients("GM")}) \ No newline at end of file diff --git a/scripts/hCzxUyO6mjLNIpaM.js b/scripts/hCzxUyO6mjLNIpaM.js index 1555cce..ec27fb5 100644 --- a/scripts/hCzxUyO6mjLNIpaM.js +++ b/scripts/hCzxUyO6mjLNIpaM.js @@ -4,4 +4,4 @@ woundsGained = Math.floor(woundsGained / 2) args.attacker.update({ "system.status.wounds.value": args.attacker.status.wounds.value + woundsGained }) -this.script.scriptMessage(`Gains ${woundsGained} Wounds`) \ No newline at end of file +this.script.scriptMessage(`Récupération de ${woundsGained} Blessures`) \ No newline at end of file diff --git a/scripts/hDC6lroDEPVBituR.js b/scripts/hDC6lroDEPVBituR.js index 02f66dc..712d884 100644 --- a/scripts/hDC6lroDEPVBituR.js +++ b/scripts/hDC6lroDEPVBituR.js @@ -4,9 +4,9 @@ await test.roll(); if (test.failed) { this.actor.update({"system.status.corruption.value" : parseInt(this.actor.status.corruption.value) + 1}) - this.script.scriptMessage("Gained a Corruption point", {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage("Gagne un Point de Corruption", {whisper : ChatMessage.getWhisperRecipients("GM")}) if (test.result.roll % 11 == 0 || test.result.roll == 100) { - this.script.scriptMessage(`Fumble: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients("GM")}) + this.script.scriptMessage(`Echec total: gain immédiat de 1 @Table[mutatemental]{Mutation Mentale}, et ne peut plus prendre d'Ambition à court-terme pour les [[1d10]] prochaines weeks.`, {whisper : ChatMessage.getWhisperRecipients("GM")}) } } \ No newline at end of file diff --git a/scripts/hhv7PrRdlf9sfC82.js b/scripts/hhv7PrRdlf9sfC82.js index 1941c02..0530e1f 100644 --- a/scripts/hhv7PrRdlf9sfC82.js +++ b/scripts/hhv7PrRdlf9sfC82.js @@ -10,10 +10,10 @@ let characteristics = { "wp" : 0, "fel" : 0 } - let skills = ["Cool", "Dodge"] + let skills = ["Calme", "Esquive"] let skillAdvancements = [10, 10] - let talents = ["Combat Reflexes"] - let trappings = ["Leather Jack", "Leather Skullcap", "Leather Leggings", "Shield"] + let talents = ["Combat Instinctif"] + let trappings = ["Veste de cuir", "Calotte de cuir", "Jambières de cuir", "Bouclier"] let items = [] let updateObj = this.actor.toObject(); @@ -48,7 +48,7 @@ let characteristics = { } else { - ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) } } @@ -65,7 +65,7 @@ let characteristics = { } else { - ui.notifications.warn(`Could not find ${trapping}`, {permanent : true}) + ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true}) } } diff --git a/scripts/yCgH3N9AurIiAv0i.js b/scripts/yCgH3N9AurIiAv0i.js index 06aecb3..89c5096 100644 --- a/scripts/yCgH3N9AurIiAv0i.js +++ b/scripts/yCgH3N9AurIiAv0i.js @@ -1,4 +1,4 @@ -if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sense)")) +if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sens)")) { let tests = this.item.system.tests.value let name = this.item.name @@ -12,12 +12,12 @@ if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sen else // If no sense specified, provide dialog choice { let choice = await ItemDialog.create(ItemDialog.objectToArray({ - taste : "Taste", - sight : "Sight", - smell : "Smell", - hearing : "Hearing", - touch : "Touch" - }, this.item.img), 1, "Choose Sense"); + taste : "Goût", + sight : "Vue", + smell : "Odorat", + hearing : "Ouie", + touch : "Toucher" + }, this.item.img), 1, "Choisir un sens"); if (choice[0]) { name = `${name.split("(")[0].trim()} (${choice[0].name})`