Add all systems effects scripts + translations
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
let choices = await Promise.all([game.wfrp4e.utility.findItemId("PzimjNx9Ojq4g6mV"), game.wfrp4e.utility.findItemId("rOPmyLWa37e7s9v6")])
|
||||
let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choose a Skill")
|
||||
let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choisir une compétence")
|
||||
|
||||
items = items.map(i => i.toObject())
|
||||
items.forEach(i => i.system.advances.value = 20)
|
||||
|
@ -12,16 +12,16 @@ let index = game.packs
|
||||
return i
|
||||
})
|
||||
|
||||
let choice = await ItemDialog.create(index, 1, "Choose a Lore")
|
||||
let choice = await ItemDialog.create(index, 1, "Choisir un Savoir")
|
||||
let text;
|
||||
if (!choice[0])
|
||||
{
|
||||
let custom = await Dialog.wait({
|
||||
title : "Enter Lore",
|
||||
title : "Saisir le savoir",
|
||||
content : "<input type='text'>",
|
||||
buttons : {
|
||||
confirm : {
|
||||
label : game.i18n.localize("Confirm"),
|
||||
label : game.i18n.localize("Confirmer"),
|
||||
callback : (dlg) => {
|
||||
return dlg.find("input")[0].value
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.result.hitloc.value == "body" && args.totalWoundLoss > 0)
|
||||
{
|
||||
args.actor.addCondition("bleeding", 2)
|
||||
this.script.scriptNotification("Added Bleeding")
|
||||
this.script.scriptNotification("Ajout Hémorragique")
|
||||
}
|
@ -1 +1 @@
|
||||
ChatMessage.create({content : "<em>Speak and be known to me</em>", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})
|
||||
ChatMessage.create({content : "<em>Parle et fais toi connaître</em>", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})
|
@ -1,4 +1,4 @@
|
||||
let skill = `Entertain (Singing)`
|
||||
let skill = `Divertissement (Chant)`
|
||||
let currentCareer = this.actor.system.currentCareer;
|
||||
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
if (["cast", "channelling", "pray"].includes(args.type))
|
||||
{
|
||||
args.abort = true;
|
||||
this.script.scriptNotification("Cannot cast Spells or use Prayers");
|
||||
this.script.scriptNotification("Impossible d'incanter un Sort ou d'utiliser un Prière");
|
||||
}
|
||||
else return true;
|
@ -8,7 +8,7 @@ if(test.failed)
|
||||
if(secondTest.failed)
|
||||
{
|
||||
this.effect.updateSource({name : "Taste of Death"})
|
||||
await this.actor.addCondition("fatigued");
|
||||
await this.actor.addCondition("fatigued");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3,6 +3,6 @@ if (args.test.characteristicKey == "wp")
|
||||
if (args.test.failed)
|
||||
{
|
||||
this.actor.addSystemEffect("convulsions")
|
||||
this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @Symptom[Convulsions] for [[1d10]] hours`)
|
||||
this.script.scriptMessage(`Test de Force Mentale échoué, <b>${this.actor.prototypeToken.name}</b> subit des @Symptom[Convulsions] pour [[1d10]] heures`)
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
let test = await this.actor.setupSkill("Dodge", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});
|
||||
let test = await this.actor.setupSkill("Esquive", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});
|
||||
await test.roll();
|
||||
|
||||
if (test.failed)
|
||||
|
@ -5,8 +5,8 @@ let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fi
|
||||
await test.roll()
|
||||
if (test.failed)
|
||||
{
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> 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.</p>
|
||||
<p>Once they fall asleep however, it is almost impossible. At this point the victim must make a <strong>Hard (-20) Endurance</strong> Test. If they fail, they never awaken.</p>`,
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> Jo ne remarque rien d'anormal si ce n'est qu'ils se fatiguent un peu plus tôt que d'habitude. À ce stade, il est encore possible de sauver la victime via un antidote puissant ou des moyens magiques.</p>
|
||||
<p>Cependant, une fois qu’ils s’endorment, c’est presque impossible. À ce stade, la victime doit effectuer un test d'Endurance <strong>difficile (-20)</strong>. S'il échoue, il ne se réveille jamais.</p>`,
|
||||
{
|
||||
whisper: ChatMessage.getWhisperRecipients("GM"),
|
||||
blind: true
|
||||
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.hasCondition("broken"))
|
||||
{
|
||||
this.actor.removeCondition("broken")
|
||||
this.script.scriptNotification(`Cannot have Broken`);
|
||||
this.script.scriptNotification(`Impossible de supprimer l'état Brisé`);
|
||||
}
|
@ -3,21 +3,21 @@ if (this.actor.type != "character")
|
||||
return;
|
||||
}
|
||||
|
||||
let god = await ValueDialog.create("Enter a Deity", "Blessed")
|
||||
let god = await ValueDialog.create("Saisir une Déité", "Béni")
|
||||
|
||||
if (god)
|
||||
{
|
||||
let prayers = await game.wfrp4e.utility.findAll("prayer", "Loading Prayers")
|
||||
let prayers = await game.wfrp4e.utility.findAll("prayer", "Chargement des Prières")
|
||||
let blessings = prayers.filter(p => p.system.god.value.split(",").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == "blessing")
|
||||
if (blessings.length)
|
||||
{
|
||||
this.script.scriptNotification("Adding " + blessings.map(i => i.name).join(", "))
|
||||
this.script.scriptNotification("Ajout de " + blessings.map(i => i.name).join(", "))
|
||||
await this.actor.createEmbeddedDocuments("Item", blessings, {fromEffect : this.effect.id})
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)
|
||||
this.script.scriptNotification(`Impossible de trouver des Bénédictions associées avec ${god}.`)
|
||||
}
|
||||
this.item.updateSource({name : this.item.name.replace("Any", god)})
|
||||
this.item.updateSource({name : this.item.name.replace("Savoir divin", god)})
|
||||
await this.actor.update({"system.details.god.value": god})
|
||||
}
|
@ -1 +1 @@
|
||||
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")))
|
||||
return args.skill?.name == "Divertissement (Chant)" || args.skill?.name == "Divertissement (Chanter)" || (args.skill?.name.includes("Langue") && (args.skill?.name.includes("Magick") || args.skill?.name.includes("Elthárin") || args.skill?.name.includes("Cathayan")))
|
@ -3,8 +3,8 @@ if (caster)
|
||||
{
|
||||
let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus
|
||||
await this.actor.modifyWounds(healed);
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${healed} Wounds`)
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> guéri ${healed} Blessures`)
|
||||
}
|
||||
|
||||
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"}})
|
||||
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "vhard"}, context : {success : "1 Point de Corruption gagné durant la dernière heure doit être supprimé.", failure: "Rien ne se passe"}})
|
||||
await test.roll();
|
@ -1,6 +1,6 @@
|
||||
this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))
|
||||
|
||||
let test = await this.actor.setupSkill("Athletics", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
|
||||
let test = await this.actor.setupSkill("Athlétisme", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ if (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();
|
||||
@ -16,6 +16,6 @@ if (location)
|
||||
|
||||
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})
|
@ -1 +1 @@
|
||||
return !["Language (Magick)", "Channelling (Hysh)"].includes(args.skill?.name)
|
||||
return !["Langue (Magick)", "Focalisation (Hysh)"].includes(args.skill?.name)
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.hasCondition("surprised"))
|
||||
{
|
||||
this.actor.removeCondition("surprised")
|
||||
this.script.scriptMessage(`Cannot be Surprised`);
|
||||
this.script.scriptMessage(`Ne peut être surpris`);
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an <b>Average (+20) Willpower</b> Test to attack this target!`)
|
||||
this.script.scriptNotification(`${args.actor.prototypeToken.name} doit réussir un Test <b>Accessible (+20) de Force Mentale</b> pour attaquer cette cible!`)
|
||||
|
||||
return true; // No need to show this in the dialog
|
@ -1,19 +1,19 @@
|
||||
let specification = this.item.system.specification.value;
|
||||
let choice = [];
|
||||
|
||||
if (!specification || specification == "Trained Skills")
|
||||
if (!specification || specification == "Compétences entraînées")
|
||||
{
|
||||
choice = await ItemDialog.create(ItemDialog.objectToArray({
|
||||
broken: "Broken",
|
||||
drive: "Drive",
|
||||
entertain: "Entertain",
|
||||
fetch: "Fetch",
|
||||
guard: "Guard",
|
||||
home: "Home",
|
||||
magic: "Magic",
|
||||
mount: "Mount",
|
||||
war: "War"
|
||||
}, this.effect.img), "unlimited", "Choose Training");
|
||||
broken: "Dompté",
|
||||
drive: "Trait",
|
||||
entertain: "Divertir",
|
||||
fetch: "Rapporter",
|
||||
guard: "Garder",
|
||||
home: "Revenir à la maison",
|
||||
magic: "Magie",
|
||||
mount: "Monture",
|
||||
war: "Guerre"
|
||||
}, this.effect.img), "unlimited", "Choisissez un Dressage");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
let table = game.wfrp4e.tables.findTable("mutatemental");
|
||||
if (!table)
|
||||
{
|
||||
ui.notifications.error("Cannot find table with key: mutatemental")
|
||||
ui.notifications.error("Impossible de trouver la table des Mutations Mentales")
|
||||
}
|
||||
let result = (await table.roll()).results[0];
|
||||
let uuid = `Compendium.${result.documentCollection}.${result.documentId}`
|
||||
@ -14,5 +14,5 @@ if (item)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.notifications.error("Item could not be found: " + uuid)
|
||||
ui.notifications.error("Impossible de trouver l'item: " + uuid)
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
{
|
||||
fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => {
|
||||
this.actor.createEmbeddedDocuments("Item", [disease.toObject()])
|
||||
this.script.scriptNotification("Gained " + disease.name)
|
||||
this.script.scriptNotification("Gain de " + disease.name)
|
||||
})
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
const talents = await Promise.all(["Schemer", "Second Sight"].map(game.wfrp4e.utility.findTalent))
|
||||
const talents = await Promise.all(["Intrigant", "Seconde Vue"].map(game.wfrp4e.utility.findTalent))
|
||||
this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id})
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv");
|
||||
let data = item.toObject();
|
||||
data.name += ` (Disease)`;
|
||||
data.name += ` (Maladie)`;
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})
|
@ -10,10 +10,10 @@ if (this.item.system.quantity.value)
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("Heal Test failed!", "error")
|
||||
this.script.scriptNotification("Test de Guérison échoué!", "error")
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("None left!", "error")
|
||||
this.script.scriptNotification("Quantité insuffisante!", "error")
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
if (this.actor.Species.toLowerCase() != "skaven") {
|
||||
this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async test => {
|
||||
this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Utilise ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async test => {
|
||||
await test.roll()
|
||||
if (test.failed)
|
||||
{
|
||||
let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)
|
||||
this.actor.update({ "system.characteristics.t.initial": this.actor.characteristics.t.initial - toughnessLost })
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> lost ${toughnessLost} Toughness`)
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> perd ${toughnessLost} points d'Endurance`)
|
||||
}
|
||||
})
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (args.totalWoundLoss > 0)
|
||||
{
|
||||
this.script.scriptMessage(`<b>${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage(`<b>${args.actor.name}</b> doit réussir un Test <b>Facile (+40) d'Endurance</b> ou subir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -5,5 +5,5 @@ if (caster)
|
||||
let bonus = caster.system.characteristics.wp.bonus
|
||||
this.actor.modifyWounds(bonus)
|
||||
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${bonus} Wounds`)
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> récupère ${bonus} Blessures`)
|
||||
}
|
@ -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"
|
||||
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"
|
@ -2,7 +2,7 @@ if (args.test.spell?.getFlag("wfrp4e", "boonOfTzeentch"))
|
||||
{
|
||||
if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)
|
||||
{
|
||||
this.script.scriptMessage(`<strong>${this.effect.name}</strong> quits your mind in disgust and erases itself from your grimoire!`)
|
||||
this.script.scriptMessage(`<strong>${this.effect.name}</strong> s'efface de votre esprit et s'efface de votre grimoire !`)
|
||||
this.effect.sourceItem.delete();
|
||||
}
|
||||
}
|
@ -1 +1 @@
|
||||
return args.type == "cast" && ["death", "necromancy", "life", "light", "heavens"].includes(args.spell?.system.lore.value)
|
||||
return args.type == "cast" && ["mort", "nécromancie", "vie", "lumière", "cieux"].includes(args.spell?.system.lore.value)
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.hasCondition("ablaze"))
|
||||
{
|
||||
this.script.scriptNotification("Immune to Ablaze")
|
||||
this.script.scriptNotification("Immunisé à En Flammes")
|
||||
await this.actor.hasCondition("ablaze")?.delete()
|
||||
}
|
@ -1 +1 @@
|
||||
return args.skill?.name == "Lore (Apothecary)"
|
||||
return args.skill?.name == "Savoir (Apothicaire)"
|
@ -2,9 +2,9 @@
|
||||
|
||||
if (args.equipped) {
|
||||
this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()])
|
||||
this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>
|
||||
They cannot cast Spells or pray for Blessings and Miracles.<br>
|
||||
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 <strong>${this.item.name}</strong>. <br>
|
||||
Il ne peut plus lancer de Sorts ni effectuer de Prières ni Miracles.<br>
|
||||
S'il porte le masque pendant plus d'1 heure ou bénéficie de l'un de ses effets, il est exposé à un @Corruption[moderate]{Corruption Modérée}.
|
||||
`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
||||
@ -14,7 +14,7 @@ else if (!args.equipped)
|
||||
{
|
||||
await this.item.effects.contents[0].delete();
|
||||
await this.item.update({name : this.item.name += " (Used)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`,
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> sur ${this.actor.name} a été enlevé et à perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être supprimés manuellement.`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")}
|
||||
)
|
||||
|
||||
|
@ -4,5 +4,5 @@ let attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.v
|
||||
if (attackerSize > actorSize)
|
||||
{
|
||||
args.actor.addCondition("prone")
|
||||
this.script.scriptMessage(`<strong>Tail Attack</strong>: ${args.actor.prototypeToken.name} is now <strong>Prone</strong>`)
|
||||
this.script.scriptMessage(`<strong>Attaque Caudale</strong>: ${args.actor.prototypeToken.name} est désormais <strong>A Terre</strong>`)
|
||||
}
|
@ -3,11 +3,11 @@ let attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.v
|
||||
|
||||
if (attackerSize > actorSize)
|
||||
{
|
||||
let msg = `<b>Tongue Attack</b>: ${args.actor.prototypeToken.name} is now @Condition[Entangled]`;
|
||||
let msg = `<b>Attaque de Langue préhensile</b>: ${args.actor.prototypeToken.name} est désormais @Condition[Empêtré]`;
|
||||
await args.actor.addCondition("entangled");
|
||||
if (actorSize <= 2)
|
||||
{
|
||||
msg += `and @Condition[Engaged]`
|
||||
msg += `et @Condition[Engagé]`
|
||||
}
|
||||
this.script.scriptMessage(msg, {speaker : {alias: args.attacker.prototypeToken.name}})
|
||||
}
|
@ -4,11 +4,11 @@ if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))
|
||||
let points = await new Roll("1d10").roll();
|
||||
game.dice3d?.showForRoll(points)
|
||||
this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value + points.total})
|
||||
this.script.scriptMessage(`Gains ${points.total} Corruption`)
|
||||
this.script.scriptMessage(`Reçoit ${points.total} Point de Corruption`)
|
||||
}
|
||||
else
|
||||
{
|
||||
let points = this.effect.sourceTest.result.overcast.usage.other.current;
|
||||
this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value - points})
|
||||
this.script.scriptMessage(`Loses ${points} Corruption`)
|
||||
this.script.scriptMessage(`Perd ${points} Point de Corruption`)
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx")
|
||||
let data = item.toObject();
|
||||
data.name = data.name.replace("Target", "Strangers");
|
||||
data.name = data.name.replace("Cible", "Strangers");
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id});
|
@ -1,2 +1,2 @@
|
||||
let test = await this.actor.setupCharacteristic("dex", {context : {failure : "Drops the item"}})
|
||||
let test = await this.actor.setupCharacteristic("dex", {context : {failure : "Lâche l'objet"}})
|
||||
await test.roll();
|
@ -10,10 +10,10 @@ let characteristics = {
|
||||
"wp" : 15,
|
||||
"fel" : 0
|
||||
}
|
||||
let skills = ["Channelling", "Cool", "Dodge", "Entertain (Storytelling)", "Intuition", "Language (Magick)", "Lore (Magic)", "Perception"]
|
||||
let skills = ["Focalisation", "Calme", "Esquive", "Divertissement (Narration)", "Intuition", "Langue (Magick)", "Savoir (Magie)", "Perception"]
|
||||
let skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]
|
||||
let talents = ["Arcane Magic", "Petty Magic", "Second Sight"]
|
||||
let trappings = ["Hand Weapon", "Quarterstaff", "Ritual Dress incorporating many ingredients and fetishes"]
|
||||
let talents = ["Magie des Arcanes", "Magie Mineure", "Seconde Vue"]
|
||||
let trappings = ["Arme simple", "(2M) Bâton de combat", "Robe de rituel incorporant des ingrédients et des 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})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ tongue = tongue.toObject();
|
||||
|
||||
|
||||
let roll = await new Roll("1d10").roll();
|
||||
roll.toMessage(this.script.getChatData({flavor : "Teeth Lost"}))
|
||||
roll.toMessage(this.script.getChatData({flavor : "Dents perdues"}))
|
||||
|
||||
teeth.system.location.value = `${roll.total} ${teeth.system.location.value}`
|
||||
brokenbone.system.location.value = "Jaw"
|
||||
|
@ -4,5 +4,5 @@ let acutesense = await fromUuid("Compendium.wfrp4e-core.items.Item.9h82z72XGo9tf
|
||||
fear = fear.toObject();
|
||||
fear.system.specification.value = 1;
|
||||
acutesense = acutesense.toObject();
|
||||
acutesense.name += " (Smell)";
|
||||
acutesense.name += " (Odorat)";
|
||||
this.actor.createEmbeddedDocuments("Item", [darkvision, fear, acutesense], {fromEffect : this.effect.id})
|
@ -1,4 +1,4 @@
|
||||
if (this.actor.has("Magic Resistance", "talent"))
|
||||
if (this.actor.has("Résistance à la Magie", "talent"))
|
||||
return
|
||||
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV")
|
||||
|
@ -9,7 +9,7 @@ let filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choose 3 Petty Spells")
|
||||
let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choisir 3 sorts de Magie Mineure")
|
||||
|
||||
|
||||
filters = [
|
||||
@ -23,7 +23,7 @@ filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choose 3 Arcane Spells")
|
||||
let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choisir 3 sorts d'Arcane")
|
||||
|
||||
let items = petty.concat(arcane).map(i => i.toObject())
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.hasCondition("stunned") || this.actor.hasCondition("unconscious"))
|
||||
{
|
||||
this.script.scriptNotification("Disabled!");
|
||||
this.script.scriptNotification("Désactivé!");
|
||||
await this.effect.update({"disabled" : true})
|
||||
}
|
@ -9,7 +9,7 @@ if (this.item.system.protects[args.opposedTest.result.hitloc.value])
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a <strong>Challenging (+0) Willpower</strong> Test`);
|
||||
this.script.scriptMessage(`${this.actor.name} doit cesser le combat et fuir à moins de réussir un jet <strong>Intermédiaire (+0) de Force Mentale</strong>`);
|
||||
this.item.setFlag("wfrp4e", "failedCool", true);
|
||||
}
|
||||
})
|
||||
|
@ -1 +1 @@
|
||||
return args.skill?.name == "Language (Magick)"
|
||||
return args.skill?.name == "Langue (Magick)"
|
@ -1,7 +1,7 @@
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> loses 1 Wound.<br>`
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> perd 1 Blessure.<br>`
|
||||
if (this.actor.status.wounds.value <= 1)
|
||||
{
|
||||
msg += `<b>${this.actor.prototypeToken.name}</b> goes unconscious.<br>`
|
||||
msg += `<b>${this.actor.prototypeToken.name}</b> tombe Inconscient.<br>`
|
||||
await this.actor.addCondition("unconscious")
|
||||
}
|
||||
this.script.scriptMessage(msg)
|
||||
|
@ -1 +1 @@
|
||||
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle: ` - ${this.effect.name}`, context: { failure : "May not flee Combat"}}).then(test => test.roll())
|
||||
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle: ` - ${this.effect.name}`, context: { failure : "Ne peut fuir les combats"}}).then(test => test.roll())
|
@ -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 : {
|
||||
@ -28,7 +28,7 @@ let choice2 = [
|
||||
let choice3 = [
|
||||
{
|
||||
type : "skill",
|
||||
name : "Melee (Two-Handed)",
|
||||
name : "Corps à corps (A deux mains)",
|
||||
diff : {
|
||||
system : {
|
||||
advances : {
|
||||
@ -43,29 +43,29 @@ let choice = await Dialog.wait({
|
||||
title : "Choice",
|
||||
content :
|
||||
`<p>
|
||||
Select your choice
|
||||
Faites un choix
|
||||
</p>
|
||||
<ol>
|
||||
<li>Melee (Basic)</li>
|
||||
<li>Melee (Polearm)</li>
|
||||
<li>Melee (Two-Handed)</li>
|
||||
<li>Corps à corps (Base)</li>
|
||||
<li>Corps à corps (Armes d'hast)</li>
|
||||
<li>Corps à corps (A deux mains)</li>
|
||||
</ol>
|
||||
`,
|
||||
buttons : {
|
||||
1 : {
|
||||
label : "Basic",
|
||||
label : "Base",
|
||||
callback : () => {
|
||||
return choice1
|
||||
}
|
||||
},
|
||||
2 : {
|
||||
label : "Polearm",
|
||||
label : "Armes d'hast",
|
||||
callback : () => {
|
||||
return choice2
|
||||
}
|
||||
},
|
||||
3 : {
|
||||
label : "Two-Handed",
|
||||
label : "A deux mains",
|
||||
callback : () => {
|
||||
return choice3
|
||||
}
|
||||
@ -97,7 +97,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})
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
if (args.applyAP && args.modifiers.ap.metal)
|
||||
{
|
||||
args.modifiers.ap.ignored += args.modifiers.ap.metal
|
||||
args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : "Add Metal AP to Damage" })
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore Metal (" + args.modifiers.ap.metal + ")");
|
||||
args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : "Ajout les PA Métalliques aux Dommages" })
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore le métal (" + args.modifiers.ap.metal + ")");
|
||||
args.modifiers.ap.metal = 0
|
||||
}
|
@ -1 +1 @@
|
||||
return !["Pick Lock", "Sleight of Hand", "Channelling (Ulgu)"].includes(args.skill?.name)
|
||||
return !["Crochetage", "Escamotage", "Focalisation (Ulgu)"].includes(args.skill?.name)
|
@ -1,5 +1,5 @@
|
||||
let healed = args.totalWoundLoss
|
||||
|
||||
this.script.scriptMessage(`<b>this.actor.prototypeToken.name</b> healed ${healed} Wounds`);
|
||||
this.script.scriptMessage(`<b>this.actor.prototypeToken.name</b> Guérison de ${healed} Blessures`);
|
||||
|
||||
this.actor.modifyWounds(healed)
|
@ -10,7 +10,7 @@ if (opposedResult?.winner == "attacker")
|
||||
if (spells.length)
|
||||
{
|
||||
let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]
|
||||
this.script.scriptMessage(`Loses access to <strong>${chosen.name}</strong>`)
|
||||
this.script.scriptMessage(`Ne se rappelle plus du sort <strong>${chosen.name}</strong>`)
|
||||
chosen.update({name : chosen.name += " (LOST)"})
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
if (args.extendedTest?.getFlag("wfrp4e", "fear"))
|
||||
{
|
||||
this.script.scriptNotification("Immune to Fear");
|
||||
this.script.scriptNotification("Immunisé à la Peur");
|
||||
args.extendedTest.delete();
|
||||
args.abort = true;
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ await this.actor.removeSystemEffect("stinkingdrunk1")
|
||||
await this.actor.addCondition("fatigued")
|
||||
const duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)
|
||||
this.effect.updateSource({"duration.rounds" : duration});
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.</p>`,
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> ne souffre des pénalités dues à l'alcool et reçoit 1 état Fatigué pour ${duration} heures.</p>`,
|
||||
{
|
||||
whisper: ChatMessage.getWhisperRecipients("GM"),
|
||||
blind: true
|
||||
|
@ -1,4 +1,4 @@
|
||||
if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == "Arcane Magic (Fire)"))
|
||||
if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == "Magie des Arcanes (Feu)"))
|
||||
{
|
||||
this.actor.addCondition("ablaze");
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells");
|
||||
spells = 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)
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts");
|
||||
spells = spells.filter(s => ["feu", "cieux", "bêtes", "ombres", "lumière", "vie", "mort", "métal"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)
|
||||
|
||||
let choice = await ItemDialog.create(spells, 1, "Choose Spell");
|
||||
let choice = await ItemDialog.create(spells, 1, "Choisir un sort");
|
||||
if (choice[0])
|
||||
{
|
||||
this.actor.createEmbeddedDocuments("Item", choice, {fromEffect: this.effect.id})
|
||||
|
@ -1,12 +1,12 @@
|
||||
if (args.totalWoundLoss > 0)
|
||||
{
|
||||
args.opposedTest.result.other.push(
|
||||
`@Corruption[minor]{Minor Exposure to Corruption}`
|
||||
`@Corruption[minor]{Exposition Mineure à la Corruption}`
|
||||
)
|
||||
this.script.scriptMessage(
|
||||
`<strong>${this.effect.name}</strong>:
|
||||
@Corruption[minor]{Minor Exposure to Corruption} <br/>
|
||||
<strong>${args.actor.prototypeToken.name}</strong> must take an
|
||||
<strong>Average (+20%) Corruption (Minor) Test</strong>`,
|
||||
@Corruption[minor]{Exposition Mineure à la Corruption} <br/>
|
||||
<strong>${args.actor.prototypeToken.name}</strong> doit réaliser un Test
|
||||
<strong>Accessible (+20%) de Corruption (Mineur)</strong>`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -6,4 +6,4 @@ args.attacker.update({"system.status.wounds.value" : args.attacker.system.status
|
||||
args.actor.addCondition("fatigued")
|
||||
args.attacker.hasCondition("fatigued")?.delete();
|
||||
|
||||
this.script.scriptMessage(`<b>${args.attacker.prototypeToken.name}</b> gains ${woundsGained} Wounds`);
|
||||
this.script.scriptMessage(`<b>${args.attacker.prototypeToken.name}</b> guéri de ${woundsGained} Blessures`);
|
@ -5,5 +5,5 @@ if (broken && !broken.getFlag("wfrp4e", "blasted-mind") && !this.actor.has(item.
|
||||
{
|
||||
await broken.delete();
|
||||
this.actor.createEmbeddedDocuments("Item", [item], {fromEffect: this.effect.id})
|
||||
this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)
|
||||
this.script.scriptNotification(`Suppression de ${broken.name}, ajout de ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells");
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts");
|
||||
spells = spells.filter(s => ["slaanesh"].includes(s.system.lore.value))
|
||||
|
||||
let choice = await ItemDialog.create(spells, 1, "Choose Spell");
|
||||
let choice = await ItemDialog.create(spells, 1, "Choisir un sort");
|
||||
if (choice[0])
|
||||
{
|
||||
this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})
|
||||
|
@ -1,2 +1,2 @@
|
||||
if (!args.opposedTest.attackerTest.item?.system?.isMagical)
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Ignored`
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Ignoré`
|
@ -1,5 +1,5 @@
|
||||
if (["orc", "ork", "goblin", "hobgoblin", "snotling", "greenskin"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))
|
||||
{
|
||||
args.addImpact = true
|
||||
args.opposedTest.result.other.push("<b>Rune of Goblin Bane</b>: Impact Added")
|
||||
args.opposedTest.result.other.push("<b>Rune de Banissement de Gobelin</b>: Ajout d'Impact")
|
||||
}
|
@ -8,7 +8,7 @@ if (type == "cold")
|
||||
|
||||
if (type == "corrosion")
|
||||
{
|
||||
let damageItems = await Dialog.confirm({title : this.item.name, content : `<p>Damage all Items carried?</p>`})
|
||||
let damageItems = await Dialog.confirm({title : this.item.name, content : `<p>Endommager tout les objets portés?</p>`})
|
||||
if (damageItems)
|
||||
{
|
||||
let msg = ``
|
||||
@ -25,17 +25,17 @@ if (type == "corrosion")
|
||||
{
|
||||
await item.system.damageItem(1);
|
||||
}
|
||||
msg += `<p><strong>${item.name}</strong> damage by 1</p>`
|
||||
msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
|
||||
}
|
||||
for(let item of armour)
|
||||
{
|
||||
await item.system.damageItem(1);
|
||||
msg += `<p><strong>${item.name}</strong> damage by 1</p>`
|
||||
msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
|
||||
}
|
||||
for(let item of trappings)
|
||||
{
|
||||
await item.system.damageItem(1);
|
||||
msg += `<p><strong>${item.name}</strong> damage by 1</p>`
|
||||
msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
|
||||
}
|
||||
if (msg)
|
||||
{
|
||||
|
@ -14,5 +14,5 @@ if (tokenImg)
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("No Token Image path configured. The image path should be set in the first line of this script.", "error");
|
||||
this.script.scriptNotification("Aucune image de Token configurée. Le chemin du token doit être configuré dans la première ligne de ce script.", "error");
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (args.item.type == "skill" && args.item.name == "Ranged (Bow)")
|
||||
if (args.item.type == "skill" && args.item.name == "Projectiles (Arc)")
|
||||
{
|
||||
args.item.system.modifier.value += 20;
|
||||
}
|
@ -2,6 +2,6 @@ teeth = await fromUuid("Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1")
|
||||
teeth = teeth.toObject();
|
||||
|
||||
let roll = await new Roll("1d10").roll();
|
||||
roll.toMessage(this.script.getChatData({flavor : "Teeth Lost"}))
|
||||
roll.toMessage(this.script.getChatData({flavor : "Dents perdues"}))
|
||||
teeth.system.location.value = `${roll.total} ${teeth.system.location.value}`
|
||||
this.actor.createEmbeddedDocuments("Item", [teeth])
|
@ -1,6 +1,6 @@
|
||||
let poisoned = this.actor.hasCondition("poisoned")
|
||||
if (poisoned)
|
||||
{
|
||||
this.script.scriptMessage("Immune to Poisoned")
|
||||
this.script.scriptMessage("Immunisé aux Poisons")
|
||||
poisoned.delete()
|
||||
}
|
@ -10,13 +10,13 @@ let characteristics = {
|
||||
"wp" : 10,
|
||||
"fel" : 15
|
||||
}
|
||||
let skills = ["Channelling", "Charm", "Perform (Dancing)"]
|
||||
let skills = ["Focalisation", "Charme", "Représentation (Danser)"]
|
||||
let skillAdvancements = [0, 6, 3]
|
||||
let talents = ["Attractive", "Distract", "Mimic"]
|
||||
let traits = ["Distracting", "Flight (6)", "Spellcaster (Petty)"]
|
||||
let talents = ["Attirant", "Distraire", "Imitation"]
|
||||
let traits = ["Perturbant", "Vol (6)", "Lanceur de Sorts (Magie Mineure)"]
|
||||
let trappings = []
|
||||
let items = [];
|
||||
let spells = ["Marsh Lights", "Sleep"];
|
||||
let spells = ["Feux follets", "Sommeil"];
|
||||
|
||||
let updateObj = this.actor.toObject();
|
||||
|
||||
@ -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
|
||||
@ -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})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT")
|
||||
this.actor.createEmbeddedDocuments("Item", [item], {fromEffect : this.effect.id});
|
||||
this.script.scriptNotification("Added " + item.name)
|
||||
this.script.scriptNotification("Ajout de " + item.name)
|
@ -1,4 +1,4 @@
|
||||
this.actor.addCondition("entangled")
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> loses 1 Wound and gains 1 <strong>Entangled</strong> Condition.`
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> perd 1 Blessure et reçoit l'état <strong>Empêtré</strong>.`
|
||||
this.script.scriptMessage(msg)
|
||||
this.actor.modifyWounds(-1)
|
@ -1,6 +1,6 @@
|
||||
let blunt = await Dialog.confirm({label : "test", content :`<p>Apply blunt damage reduction? (-3)</p>`})
|
||||
let blunt = await Dialog.confirm({label : "test", content :`<p>Appliquer la réduction des Dégats contondants? (-3)</p>`})
|
||||
|
||||
if (blunt)
|
||||
{
|
||||
args.modifiers.other.push({label : this.effect.name, details : "Blunt Damage Reduction", value : -3})
|
||||
args.modifiers.other.push({label : this.effect.name, details : "Réduction des dégats contondants", value : -3})
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
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"}})
|
||||
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {fields: {difficulty : "average"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : "Souffre d'Irrationnalité Effrayante"}})
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
msg = `<p>@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: <a class="inline-roll"><i class="fas fa-dice-d20"></i>${Math.ceil(CONFIG.Dice.randomUniform() * 10)}</a></p>`
|
||||
msg = `<p>@UUID[${this.effect.sourceItem.uuid}]{Irrationnalité Effrayante} Lancez: <a class="inline-roll"><i class="fas fa-dice-d20"></i>${Math.ceil(CONFIG.Dice.randomUniform() * 10)}</a></p>`
|
||||
if (test.result.roll % 11 == 0 || test.result.roll == 100)
|
||||
{
|
||||
msg += `<p><b>${this.actor.prototypeToken.name}</b> also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}</p>`
|
||||
msg += `<p><b>${this.actor.prototypeToken.name}</b> reçoit également 1 Point de Corruption. Si il subit une mutation, il doit la déterminer sur la table des @Table[mutatemental]{Mutations Mentales}.</p>`
|
||||
let newCorruption = Number(this.actor.status.corruption.value) + 1
|
||||
this.actor.update({"system.status.corruption.value" : newCorruption})
|
||||
}
|
||||
|
@ -15,13 +15,13 @@ if (test.failed)
|
||||
|
||||
let inline = `<a class="inline-roll" data-tooltip="@TT"><i class="fas fa-dice-d20"></i>@ROLL</a>`
|
||||
let msg =
|
||||
`<p><b>${this.actor.prototypeToken.name}</b> ages by ${inline.replace("@ROLL", ageAdded).replace("@TT", "2d10")} and loses</p>
|
||||
<p>${inline.replace("@ROLL", ws).replace("@TT", "1d10")} <b>Weapon Skill</b></p>
|
||||
<p>${inline.replace("@ROLL", bs).replace("@TT", "1d10")} <b>Ballistic Skill</b></p>
|
||||
<p>${inline.replace("@ROLL", s).replace("@TT", "1d10")} <b>Strength</b></p>
|
||||
<p>${inline.replace("@ROLL", t).replace("@TT", "1d10")} <b>Toughness</b></p>
|
||||
<p>${inline.replace("@ROLL", ag).replace("@TT", "1d10")} <b>Agility</b></p>
|
||||
<p>${inline.replace("@ROLL", dex).replace("@TT", "1d10")} <b>Dexterity</b></p>
|
||||
`<p><b>${this.actor.prototypeToken.name}</b> vieilli de ${inline.replace("@ROLL", ageAdded).replace("@TT", "2d10")} et perd</p>
|
||||
<p>${inline.replace("@ROLL", ws).replace("@TT", "1d10")} <b>Capacité de Combat</b></p>
|
||||
<p>${inline.replace("@ROLL", bs).replace("@TT", "1d10")} <b>Capacité de Tir</b></p>
|
||||
<p>${inline.replace("@ROLL", s).replace("@TT", "1d10")} <b>Force</b></p>
|
||||
<p>${inline.replace("@ROLL", t).replace("@TT", "1d10")} <b>Endurance</b></p>
|
||||
<p>${inline.replace("@ROLL", ag).replace("@TT", "1d10")} <b>Agilité</b></p>
|
||||
<p>${inline.replace("@ROLL", dex).replace("@TT", "1d10")} <b>Dexterité</b></p>
|
||||
`
|
||||
this.script.scriptMessage(msg);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z")
|
||||
let data = item.toObject();
|
||||
data.name += " (To Be Determined)"
|
||||
data.name += " (A déterminer)"
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -1 +1 @@
|
||||
return args.skill?.name.includes("Channelling") || args.type == "channelling"
|
||||
return args.skill?.name.includes("Focalisation") || args.type == "channelling"
|
@ -1 +1 @@
|
||||
return args.item?.name == "Play (Lute)"
|
||||
return args.item?.name == "Musicien (Luth)"
|
@ -1,11 +1,11 @@
|
||||
if (this.actor.system.status.advantage.value > 0)
|
||||
{
|
||||
await this.actor.modifyAdvantage(-1);
|
||||
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)
|
||||
|
@ -1,4 +1,4 @@
|
||||
args.actor.setupSkill("Dodge", { fields: { difficulty: "average" } }).then(async test => {
|
||||
args.actor.setupSkill("Esquive", { fields: { difficulty: "average" } }).then(async test => {
|
||||
await test.roll();
|
||||
if (test.failed) {
|
||||
await args.actor.addCondition("bleeding")
|
||||
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == "attacker")
|
||||
{
|
||||
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")})
|
||||
this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
||||
|
@ -2,16 +2,16 @@ if (args.opposedTest?.attackerTest?.item?.system?.isRanged)
|
||||
{
|
||||
let choice = await Dialog.wait({
|
||||
title: this.effect.name,
|
||||
content: `<p>Abort damage with <strong>${this.effect.name}</strong>?`,
|
||||
content: `<p>Eviter les dégâts avec <strong>${this.effect.name}</strong>?`,
|
||||
buttons: {
|
||||
yes: {
|
||||
label: "Yes",
|
||||
label: "Oui",
|
||||
callback: () => {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
no: {
|
||||
label: "No",
|
||||
label: "Non",
|
||||
callback: () => {
|
||||
return false;
|
||||
}
|
||||
@ -21,6 +21,6 @@ if (args.opposedTest?.attackerTest?.item?.system?.isRanged)
|
||||
|
||||
if (choice)
|
||||
{
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Damage cancelled`
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Dégâts annulés`
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (args.totalWoundLoss > 0 && ["trait", "weapon"].includes(args.opposedTest.attackerTest.item?.type))
|
||||
{
|
||||
this.script.scriptMessage(`<b>Infected: ${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage(`<b>Infctée: ${args.actor.name}</b> doit réussir un Test <b>Facile (+40) de Résistance</b> ou subir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -3,4 +3,4 @@ let current = this.actor.status.fortune.value
|
||||
|
||||
this.actor.update({"system.status.fortune.value" : fortunePoints + current})
|
||||
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> fortune points increased from ${current} to ${fortunePoints + current}`)
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> voit ses Points de Chance augmenter de ${current} à ${fortunePoints + current}`)
|
@ -2,10 +2,8 @@
|
||||
|
||||
if (args.equipped) {
|
||||
this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()])
|
||||
this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>
|
||||
They gain +50 to Swim Tests and can breathe underwater.<br>
|
||||
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 <strong>${this.item.name}</strong>. <br>
|
||||
Il bénéficie de +50 aux Tests de Natation et peut respirer sous l'eau.<br>Si il porte le masque pendant plus d'une heure ou bénéficie de l'un de ses effets, il est exposé à une @Corruption[moderate]{Corruption Modérée}.`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
||||
|
||||
@ -14,7 +12,7 @@ else if (!args.equipped)
|
||||
{
|
||||
await this.item.effects.contents[0].delete();
|
||||
await this.item.update({name : this.item.name += " (Used)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`,
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> porté par ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, ses effets perdurent pendant [[1d10+4]] jours, après quoi il faudra les supprimer manuellement.`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")}
|
||||
)
|
||||
|
||||
|
@ -2,4 +2,4 @@ let points = this.effect.sourceTest.result.overcast.usage.other.current;
|
||||
|
||||
this.actor.update({"system.status.fortune.value" : this.actor.system.status.fortune.value + points});
|
||||
|
||||
this.script.scriptMessage(`Gained ${points} Fortune Points`)
|
||||
this.script.scriptMessage(`Gagne ${points} Points de Chance`)
|
@ -1,10 +1,10 @@
|
||||
if(args.opposedTest.result.winner == "defender")
|
||||
{
|
||||
let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)
|
||||
let msg = `Rolled ${roll}.`
|
||||
let msg = `Résultat ${roll}.`
|
||||
if (roll >= 7)
|
||||
{
|
||||
msg = `Attack hits with an SL of ${roll - 6}.`
|
||||
msg = `L'attaque touche avec un DR de ${roll - 6}.`
|
||||
}
|
||||
this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -2,6 +2,6 @@ this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle: ` - ${this.
|
||||
await test.roll()
|
||||
if (test.failed) {
|
||||
this.actor.modifyWounds(-1);
|
||||
this.script.scriptMessage("Takes 1 Damage")
|
||||
this.script.scriptMessage("Subit 1 Dégat")
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user