Add all systems effects scripts + translations
This commit is contained in:
@ -15,25 +15,25 @@ if (wounds.value > 0)
|
||||
{
|
||||
wounds.value = wounds.max
|
||||
}
|
||||
message += `<b>${this.actor.name}</b> regains ${regen} Wounds.`
|
||||
message += `<b>${this.actor.name}</b> récupère ${regen} Blessures.`
|
||||
|
||||
if (regen == 10)
|
||||
{
|
||||
message += `<br>Additionally, they regenerate a Critical Wound.`
|
||||
}
|
||||
message += `<br>En plus, il guérit d'une Blessure Critique.`
|
||||
B }
|
||||
}
|
||||
else if (regen >= 8)
|
||||
{
|
||||
message += `<b>${this.actor.name}</b> rolled a ${regen} and regains 1 Wound.`
|
||||
message += `<b>${this.actor.name}</b> résultat de ${regen} et récupère 1 Blessure.`
|
||||
wounds.value += 1
|
||||
if (regen == 10)
|
||||
{
|
||||
message += `<br>Additionally, they regenerate a Critical Wound.`
|
||||
message += `<br>En plus, il guérit d'une Blessure Critique.`
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
message += `<b>${this.actor.name}</b> Regenerate roll of ${regen} - No effect.`
|
||||
message += `<b>${this.actor.name}</b> Résultat de ${regen} - Aucun effet.`
|
||||
}
|
||||
|
||||
await this.actor.update({ "system.status.wounds": wounds })
|
||||
|
@ -1,4 +1,4 @@
|
||||
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)")
|
||||
let choice = await ItemDialog.create(this.actor.itemTypes.critical, (this.effect.sourceTest.result.overcast.usage.other.current || 1), "Choisissez la Blessure Critique à soigner (ne peut guérir les membres perdus)")
|
||||
|
||||
this.script.scriptMessage(`Healed <strong>${choice.map(i => i.name).join(`, `)}</strong>`);
|
||||
this.script.scriptMessage(`Guéri de <strong>${choice.map(i => i.name).join(`, `)}</strong>`);
|
||||
this.actor.deleteEmbeddedDocuments("Item", choice.map(i => i.id))
|
@ -6,5 +6,5 @@ if (this.item.system.quantity.value)
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("None left!", "error")
|
||||
this.script.scriptNotification("Aucun disponible!", "error")
|
||||
}
|
@ -8,6 +8,6 @@ if (args.test.options.wallcrawler)
|
||||
args.test.result.description = game.i18n.localize("ROLL.MarginalSuccess");
|
||||
}
|
||||
args.test.result.outcome = "success"
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 SL`)
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 DR`)
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))
|
||||
{
|
||||
this.actor.modifyAdvantage(-1);
|
||||
this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);
|
||||
this.script.scriptNotification(`${this.actor.name} perd 1 Avantage`);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
// After consumption, the user gains the Magic Resistance 3 Creature Trait,
|
||||
// reducing the SL of any spell affecting it by 3.
|
||||
// This effect lasts for one hour.
|
||||
const hasMagicResistance = this.actor.has("Magic Resistance")
|
||||
const hasMagicResistance = this.actor.has("Résistance à la Magie")
|
||||
|
||||
if (hasMagicResistance === undefined) {
|
||||
fromUuid("Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ").then(trait => {
|
||||
@ -9,12 +9,12 @@ if (hasMagicResistance === undefined) {
|
||||
traitItem.system.specification.value = 2
|
||||
this.actor.createEmbeddedDocuments("Item", [traitItem], {fromEffect: this.effect.id})
|
||||
})
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has gained the Magic Resistance Trait. This effect lasts for one hour.</p>`, {whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> bénéficie du Trait Résistance à la Magie. Cet effet dure 1 heure.</p>`, {whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
||||
}
|
||||
|
||||
if (hasMagicResistance) {
|
||||
// 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.
|
||||
let msg = `<p><strong>${this.actor.prototypeToken.name}</strong> has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.</p>`
|
||||
let msg = `<p><strong>${this.actor.prototypeToken.name}</strong> a amélioré sa Résistance à la Magie de 1 pour atteindre ${parseInt(hasMagicResistance.system.specification.value)}. Cette effte dure 1 heure.</p>`
|
||||
|
||||
// Resist toxic effect
|
||||
this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {
|
||||
@ -24,8 +24,8 @@ if (hasMagicResistance) {
|
||||
|
||||
// If they fail ...
|
||||
if (!test.succeeded) {
|
||||
msg += `<p>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.</p>
|
||||
<p>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.</p>`
|
||||
msg += `<p>Cependant, il commence à suinter la bave épaisse et venimeuse qui recouvre chaque Dreadmaw. Il reçoit 1 état Empoisonné et doit continuer à recevoir 1 état @Condition[Empoisonné] andà la fin de chaque round.</p>
|
||||
<p>Si le personnage est toujours vivant à la fin de 10 rounds, les effets cessent et tout les états Empoisonnés dues à ${this.effect.name} sont supprimés.</p>`
|
||||
this.actor.addCondition("poisoned", 1)
|
||||
}
|
||||
this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
||||
|
@ -1,2 +1,2 @@
|
||||
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();
|
@ -1,12 +1,12 @@
|
||||
// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor
|
||||
|
||||
let mainEffect = this.item.effects.contents[0];
|
||||
if (mainEffect.name.includes("(Lore)"))
|
||||
if (mainEffect.name.includes("(Savoir)"))
|
||||
{
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, "Choose Lore");
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, "Choisissez le Savoir");
|
||||
if (choice.length)
|
||||
{
|
||||
mainEffect.update({name : mainEffect.name.replace("Lore", choice[0].name)})
|
||||
mainEffect.update({name : mainEffect.name.replace("Savoir", choice[0].name)})
|
||||
this.item.update({name : this.item.name += ` (${choice[0].name})`})
|
||||
}
|
||||
}
|
||||
|
@ -2,10 +2,10 @@
|
||||
(this.actor.isOpposing || args.test.context.defending) &&
|
||||
args.test.result.roll % 11 == 0 &&
|
||||
args.test.succeeded &&
|
||||
["Language (Magick)", "Dodge"].includes(args.test.item?.name))
|
||||
["Langue (Magick)", "Esquive"].includes(args.test.item?.name))
|
||||
{
|
||||
args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited
|
||||
let text = `<strong>${this.effect.name}</strong>: Adding Unstable and Ward`
|
||||
let text = `<strong>${this.effect.name}</strong>: Ajout de Instable et Protection`
|
||||
args.test.result.other.push(text)
|
||||
this.script.scriptNotification(text);
|
||||
|
||||
|
@ -3,7 +3,7 @@ if (args.test.result.critical && args.test.result.roll % 10 == 0)
|
||||
game.wfrp4e.tables.findTable("knuckleduster-diseases").roll().then(roll => {
|
||||
let results = roll.results[0]
|
||||
|
||||
this.script.scriptMessage(`<strong>${this.actor.name}</strong> contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients("GM") })
|
||||
this.script.scriptMessage(`<strong>${this.actor.name}</strong> subit @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients("GM") })
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ if (args.item?.system.attackType)
|
||||
{
|
||||
penalty -= 30
|
||||
}
|
||||
if (args.actor.has("Second Sight", "talent"))
|
||||
if (args.actor.has("Seconde Vue", "talent"))
|
||||
penalty += 10
|
||||
|
||||
args.prefillModifiers.modifier += penalty
|
@ -1,5 +1,5 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp")
|
||||
let data = item.toObject();
|
||||
data.system.specification.value = "When Alone";
|
||||
data.system.specification.value = "Lorsque seul";
|
||||
data.effects[0].disabled = true;
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -1,9 +1,9 @@
|
||||
if (!this.actor.effects.find(e => e.isCondition))
|
||||
{
|
||||
return this.script.scriptNotification("No Conditions on this Actor")
|
||||
return this.script.scriptNotification("Aucun état sur cet Acteur")
|
||||
}
|
||||
|
||||
let choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, "Choose a Condition")
|
||||
let choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, "Choisissez un état")
|
||||
|
||||
if (choice[0])
|
||||
{
|
||||
|
@ -4,7 +4,8 @@ if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settin
|
||||
let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
|
||||
if (ones > SL)
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)
|
||||
if (ones > SL) {
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Utilise le dé d'unité comme DR`)
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@ let filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, "Choose 2 Skills to add +20")
|
||||
let items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, "Choisissez 2 Compétences pour y ajouter +20")
|
||||
items = items.map(i => i.toObject())
|
||||
items.forEach(i => i.system.advances.value = 20)
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
let content = `<b>${this.effect.name}</b>: All targets engaged with <b>${this.actor.prototypeToken.name}</b> take [[/r 1d10]] Damage, modified by TB and AP.`
|
||||
let content = `<b>${this.effect.name}</b>: Toute les cibles au contact abec <b>${this.actor.prototypeToken.name}</b> subissent [[/r 1d10]] dégats, modifiés par le BE et les PA.`
|
||||
|
||||
this.script.scriptMessage(content)
|
@ -18,9 +18,9 @@
|
||||
let bio =
|
||||
`
|
||||
<p><strong>Template</strong>: ${template.text}</p>
|
||||
<p><strong>Phsyical Quirk</strong>: ${physicalQuirk}</p>
|
||||
<p><strong>Work Ethic</strong>: ${workEthic}</p>
|
||||
<p><strong>Personality Quirk</strong>: ${personalityQuirk}</p>
|
||||
<p><strong>Bizarrerie Physique</strong>: ${physicalQuirk}</p>
|
||||
<p><strong>Etique de travail</strong>: ${workEthic}</p>
|
||||
<p><strong>Bizarrerie de personnalité</strong>: ${personalityQuirk}</p>
|
||||
`
|
||||
|
||||
this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
|
@ -3,7 +3,7 @@ let hv = (await fromUuid("Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR")).
|
||||
let ms = (await fromUuid("Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5")).toObject();
|
||||
let ss = (await fromUuid("Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2")).toObject();
|
||||
|
||||
as.name += " (Sight)";
|
||||
as.name += " (Vue)";
|
||||
|
||||
let roll = (await new Roll("1d10").roll());
|
||||
roll.toMessage(this.script.getChatData())
|
||||
|
@ -1,6 +1,6 @@
|
||||
let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize("NAME.Melee")))
|
||||
|
||||
let skill = await ItemDialog.create(skills, 1, "Select the skill used by the weapon")
|
||||
let skill = await ItemDialog.create(skills, 1, "Sélectionnez la compétence à utiliser avec l'arme")
|
||||
let group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)
|
||||
let groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)
|
||||
|
||||
@ -18,4 +18,4 @@ let weapon = {
|
||||
}
|
||||
|
||||
Item.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})
|
||||
this.script.scriptNotification("Item created. Further customization must be done manually within the Item's sheet");
|
||||
this.script.scriptNotification("Item créé. Les modifications supplémentaires doivent être réalisées manuellement sur la fiche de l'objet.");
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.result.hitloc.value == "body" && args.totalWoundLoss > 0)
|
||||
{
|
||||
args.actor.addCondition("bleeding", 2)
|
||||
this.script.scriptMessage("Gained 2 Bleeding Conditions")
|
||||
this.script.scriptMessage("Ajout de 2 état Hémorragiques")
|
||||
}
|
@ -2,6 +2,6 @@ if (args.test.spell.name == "Warp Lightning")
|
||||
{
|
||||
if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)
|
||||
{
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> Overloads!`)
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> Surcharge!`)
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@ let diseaseIndex = game.packs
|
||||
return i
|
||||
})
|
||||
|
||||
let choice = await ItemDialog.create(diseaseIndex , 1, "Choose a Disease")
|
||||
let choice = await ItemDialog.create(diseaseIndex , 1, "Choisissez une maladie")
|
||||
|
||||
if (choice[0])
|
||||
{
|
||||
|
@ -1 +1 @@
|
||||
return args.skill?.name == "Stealth (Rural)"
|
||||
return args.skill?.name == "Discrétion (Rurale)"
|
@ -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})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ else if (roll = 10)
|
||||
modifier = -5
|
||||
}
|
||||
|
||||
message = `${roll} Rolled, gain ${item.name}, ${modifier} Strength`
|
||||
message = `Résultat de ${roll}, gagnez ${item.name}, ${modifier} en Force`
|
||||
dice.toMessage(this.script.getChatData())
|
||||
|
||||
let changes = duplicate(this.effect.changes)
|
||||
|
@ -7,10 +7,10 @@ if (args.test.options.healWounds) {
|
||||
wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))
|
||||
}
|
||||
args.test.result.woundsHealed = wounds
|
||||
args.test.result.other.push(`<b>${this.actor.name}</b> healed <b>${wounds}</b> wounds of the patient.`)
|
||||
args.test.result.other.push(`<b>${this.actor.name}</b> guérit <b>${wounds}</b> Points de Blessures du patient.`)
|
||||
}
|
||||
else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)
|
||||
{
|
||||
args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)
|
||||
args.test.result.other.push(`Le patient subit une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray({
|
||||
int : game.wfrp4e.config.characteristics.int,
|
||||
fel : game.wfrp4e.config.characteristics.fel
|
||||
}, this.effect.img), 1, "Choose Characteristic");
|
||||
}, this.effect.img), 1, "Choisissez une caractéristique");
|
||||
|
||||
this.effect.updateSource({"flags.wfrp4e.characteristic" : choice[0].id})
|
@ -11,7 +11,7 @@ if (location)
|
||||
|
||||
if (dropped.length)
|
||||
{
|
||||
this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(", ")}!`)
|
||||
this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(", ")}!`)
|
||||
for(let weapon of dropped)
|
||||
{
|
||||
await weapon.system.toggleEquip();
|
||||
|
@ -7,5 +7,5 @@ if (this.item.system.quantity.value)
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("None left!", "error")
|
||||
this.script.scriptNotification("Quantité insuffisante!", "error")
|
||||
}
|
@ -6,5 +6,5 @@ if (this.item.system.quantity.value)
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("None left!", "error")
|
||||
this.script.scriptNotification("Quantité insuffisante!", "error")
|
||||
}
|
@ -1,135 +1,129 @@
|
||||
let choice1 = [
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Chausses"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coat"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coif"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Chausses de Mailles"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Cotte de Mailles"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Coiffe de Mailles"
|
||||
},
|
||||
]
|
||||
let choice2 = [
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Chausses"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coat"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coif"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Leggings"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Skullcap"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Jack"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Chausses de Mailles"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Cotte de Mailles"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Coiffe de Mailles"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Jambières de Cuir"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Calotte de Cuir"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Veste de Cuir"
|
||||
},
|
||||
]
|
||||
let choice3 = [
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Breastplate"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Bracers"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Helm"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Leggings"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Plastron d'acier"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Brassards"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Heaume"
|
||||
},
|
||||
{
|
||||
type: "armour",
|
||||
name: "Jambières d'acier"
|
||||
},
|
||||
]
|
||||
|
||||
let choice = await new Promise((resolve, reject) => {
|
||||
new Dialog({
|
||||
title : "Choice",
|
||||
content :
|
||||
`<p>
|
||||
Select your choice
|
||||
new Dialog({
|
||||
title: "Choix",
|
||||
content:
|
||||
`<p>
|
||||
Selectionnez votre choix
|
||||
</p>
|
||||
<ol>
|
||||
<li>Mail</li>
|
||||
<li>Mail & Leather</li>
|
||||
<li>Plate</li>
|
||||
<li>Mailles</li>
|
||||
<li>Mailles & Cuir</li>
|
||||
<li>Plates</li>
|
||||
</ol>
|
||||
`,
|
||||
buttons : {
|
||||
1 : {
|
||||
label : "Mail",
|
||||
callback : () => {
|
||||
resolve(choice1)
|
||||
}
|
||||
},
|
||||
2 : {
|
||||
label : "Mail & Leather",
|
||||
callback : () => {
|
||||
resolve(choice2)
|
||||
}
|
||||
},
|
||||
3 : {
|
||||
label : "Plate",
|
||||
callback : () => {
|
||||
resolve(choice3)
|
||||
}
|
||||
}
|
||||
buttons: {
|
||||
1: {
|
||||
label: "Mailles",
|
||||
callback: () => {
|
||||
resolve(choice1)
|
||||
}
|
||||
}).render(true)
|
||||
})
|
||||
},
|
||||
2: {
|
||||
label: "Mailles & Cuir",
|
||||
callback: () => {
|
||||
resolve(choice2)
|
||||
}
|
||||
},
|
||||
3: {
|
||||
label: "Plates",
|
||||
callback: () => {
|
||||
resolve(choice3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}).render(true)
|
||||
})
|
||||
|
||||
let updateObj = this.actor.toObject();
|
||||
let items = []
|
||||
for (let c of choice)
|
||||
{
|
||||
let existing
|
||||
if (c.type == "skill")
|
||||
{
|
||||
existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)
|
||||
if (existing && c.diff?.system?.advances?.value)
|
||||
{
|
||||
existing.system.advances.value += c.diff.system.advances.value
|
||||
}
|
||||
for (let c of choice) {
|
||||
let existing
|
||||
if (c.type == "skill") {
|
||||
existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)
|
||||
if (existing && c.diff?.system?.advances?.value) {
|
||||
existing.system.advances.value += c.diff.system.advances.value
|
||||
}
|
||||
}
|
||||
|
||||
if (!existing)
|
||||
{
|
||||
let item = await game.wfrp4e.utility.find(c.name, c.type)
|
||||
if (item)
|
||||
{
|
||||
item = item.toObject()
|
||||
equip(item);
|
||||
items.push(mergeObject(item, (c.diff || {})))
|
||||
}
|
||||
else
|
||||
ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})
|
||||
if (!existing) {
|
||||
let item = await game.wfrp4e.utility.find(c.name, c.type)
|
||||
if (item) {
|
||||
item = item.toObject()
|
||||
equip(item);
|
||||
items.push(mergeObject(item, (c.diff || {})))
|
||||
}
|
||||
else
|
||||
ui.notifications.warn(`Impossible de trouver ${c.name}`, { permanent: true })
|
||||
}
|
||||
|
||||
}
|
||||
await this.actor.update(updateObj)
|
||||
this.actor.createEmbeddedDocuments("Item", items);
|
||||
|
||||
function equip(item)
|
||||
{
|
||||
if (item.type == "armour")
|
||||
item.system.worn.value = true
|
||||
else if (item.type == "weapon")
|
||||
item.system.equipped = true
|
||||
else if (item.type == "trapping" && item.system.trappingType.value == "clothingAccessories")
|
||||
item.system.worn = true
|
||||
function equip(item) {
|
||||
if (item.type == "armour")
|
||||
item.system.worn.value = true
|
||||
else if (item.type == "weapon")
|
||||
item.system.equipped = true
|
||||
else if (item.type == "trapping" && item.system.trappingType.value == "clothingAccessories")
|
||||
item.system.worn = true
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
let mutations = await game.wfrp4e.utility.findAll("mutation", "Loading Mutations")
|
||||
let mutations = await game.wfrp4e.utility.findAll("mutation", "Chargement des mutations")
|
||||
let roll = Math.floor(CONFIG.Dice.randomUniform() * mutations.length);
|
||||
this.actor.createEmbeddedDocuments("Item", [mutations[roll]]);
|
||||
this.script.scriptNotification(`Added ${mutations[roll].name}`)
|
||||
this.script.scriptNotification(`Ajout ${mutations[roll].name}`)
|
@ -1,10 +1,10 @@
|
||||
let stunned = this.actor.hasCondition("stunned")
|
||||
if (stunned)
|
||||
{
|
||||
this.script.scriptNotification(`Cleared 1 Stunned Condition`)
|
||||
this.script.scriptNotification(`Suppression de 1 état Assomé`)
|
||||
this.actor.removeCondition("stunned");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification(`No Stunned Conditions`)
|
||||
this.script.scriptNotification(`Aucun état Assomé`)
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
if (args.attacker.has("Undead") && !args.attacker.has("Ethereal"))
|
||||
if (args.attacker.has("Mort-vivant") && !args.attacker.has("Ethéré"))
|
||||
{
|
||||
args.totalWoundLoss = Math.floor(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 deux", value : "× 0.5"})
|
||||
}
|
@ -8,6 +8,6 @@ if (args.test.options.stag)
|
||||
args.test.result.description = game.i18n.localize("ROLL.MarginalSuccess");
|
||||
}
|
||||
args.test.result.outcome = "success"
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 SL`)
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 DR`)
|
||||
}
|
||||
}
|
@ -1,16 +1,16 @@
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells")
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts")
|
||||
|
||||
let lore = (await game.wfrp4e.tables.rollTable("random-caster", {hideDSN: true})).text
|
||||
this.script.scriptNotification(lore)
|
||||
if (lore == "GM's Choice") {
|
||||
if (lore == "Au choix") {
|
||||
return
|
||||
}
|
||||
|
||||
else if (lore == "Arcane Magic") {
|
||||
else if (lore == "Magie des Arcanes") {
|
||||
lore = "Arcane"
|
||||
}
|
||||
|
||||
else if (lore == "Petty Magic") {
|
||||
else if (lore == "Magie Mineure ") {
|
||||
lore = "petty"
|
||||
}
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
const talents = await Promise.all(["Ambidextrous", "Distract"].map(game.wfrp4e.utility.findTalent))
|
||||
const talents = await Promise.all(["Ambidextre", "Distraire"].map(game.wfrp4e.utility.findTalent))
|
||||
this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id})
|
@ -1 +1 @@
|
||||
return this.actor.attacker && (args.skill?.name.includes("Melee (Basic)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic"))
|
||||
return this.actor.attacker && (args.skill?.name.includes("Corps à corps (Bas)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic"))
|
@ -2,4 +2,4 @@ let current = this.actor.status.fortune.value
|
||||
|
||||
this.actor.update({"system.status.fortune.value" : 1 + current})
|
||||
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> fortune points increased from ${current} to ${1 + current}`)
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> voit ses Points de Chance augmenter de ${current} à ${1 + current}`)
|
@ -1,89 +1,89 @@
|
||||
let choice1 = [
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Chausses"
|
||||
name : "Chausses de Mailles"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coat"
|
||||
name : "Cotte de Mailles"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coif"
|
||||
name : "Coiffe de Mailles"
|
||||
},
|
||||
]
|
||||
let choice2 = [
|
||||
{
|
||||
{
|
||||
type : "armour",
|
||||
name : "Chausses de Mailles"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Cotte de Mailles"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Coiffe de Mailles"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Chausses"
|
||||
name : "Jambières de Cuir"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coat"
|
||||
name : "Calotte de Cuir"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Mail Coif"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Leggings"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Skullcap"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Leather Jack"
|
||||
name : "Veste de Cuir"
|
||||
},
|
||||
]
|
||||
let choice3 = [
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Breastplate"
|
||||
name : "Plastron d'acier"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Bracers"
|
||||
name : "Brassards"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Helm"
|
||||
name : "Heaume"
|
||||
},
|
||||
{
|
||||
type : "armour",
|
||||
name : "Plate Leggings"
|
||||
name : "Jambières d'acier"
|
||||
},
|
||||
]
|
||||
|
||||
let choice = await Dialog.wait({
|
||||
title : "Choice",
|
||||
title : "Choix",
|
||||
content :
|
||||
`<p>
|
||||
Select your choice
|
||||
Sélectionnez votre choix
|
||||
</p>
|
||||
<ol>
|
||||
<li>Mail</li>
|
||||
<li>Mail & Leather</li>
|
||||
<li>Plate</li>
|
||||
<li>Mailles</li>
|
||||
<li>Mailles & Cuir</li>
|
||||
<li>Plates</li>
|
||||
</ol>
|
||||
`,
|
||||
buttons : {
|
||||
1 : {
|
||||
label : "Mail",
|
||||
label : "Mailles",
|
||||
callback : () => {
|
||||
return choice1
|
||||
}
|
||||
},
|
||||
2 : {
|
||||
label : "Mail & Leather",
|
||||
label : "Mailles & Cuir",
|
||||
callback : () => {
|
||||
return choice2
|
||||
}
|
||||
},
|
||||
3 : {
|
||||
label : "Plate",
|
||||
label : "Plates",
|
||||
callback : () => {
|
||||
return choice3
|
||||
}
|
||||
@ -115,7 +115,7 @@ for (let c of choice)
|
||||
items.push(mergeObject(item, (c.diff || {})))
|
||||
}
|
||||
else
|
||||
ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,5 +10,5 @@ let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at locatio
|
||||
damage -= (APused + this.actor.system.characteristics.t.bonus)
|
||||
|
||||
let msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});
|
||||
msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`
|
||||
msg += ` (ignore ${metalAP} PA métalliques sur ${game.wfrp4e.config.locations[loc]})`
|
||||
this.script.scriptMessage(msg)
|
||||
|
@ -4,12 +4,12 @@ roll.toMessage(this.script.getChatData());
|
||||
if (fatigued > this.actor.characteristics.wp.bonus)
|
||||
{
|
||||
this.actor.addCondition("unconscious")
|
||||
this.script.scriptNotification(`Fell Unconscious`)
|
||||
this.script.scriptNotification(`Tombe Incoscient`)
|
||||
}
|
||||
else
|
||||
{
|
||||
fatigued = Math.max(0, fatigued)
|
||||
if (fatigued)
|
||||
this.actor.addCondition("fatigued", fatigued)
|
||||
this.script.scriptNotification(`Gained ${fatigued} conditions`)
|
||||
this.script.scriptNotification(`Subit ${fatigued} état Fatigué`)
|
||||
}
|
@ -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;
|
||||
}
|
@ -10,13 +10,13 @@ let characteristics = {
|
||||
"wp" : 10,
|
||||
"fel" : 10
|
||||
}
|
||||
let skills = ["Charm", "Channelling", "Entertain (Prophecy)", "Intuition"]
|
||||
let skills = ["Charme", "Focalisation", "Divertissement (Prophecie)", "Intuition"]
|
||||
let skillAdvancements = [0, 0, 20, 10]
|
||||
let talents = ["Detect Artefact", "Menacing", "Sixth Sense"]
|
||||
let traits = ["Dooming", "Spellcaster (Lore of Life)", "Ward"]
|
||||
let talents = ["Détection d’artefact", "Menaçant", "Sixième Sens"]
|
||||
let traits = ["Destinée", "Lanceur de sorts (Domaine de la Vie)", "Protection"]
|
||||
let trappings = []
|
||||
let items = [];
|
||||
let spells = ["Forest of Thorns"];
|
||||
let spells = ["Forêt d'épines"];
|
||||
|
||||
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
|
||||
|
@ -1 +1 @@
|
||||
return !["Charm Animal", "Endurance", "Outdoor Survival"].includes(args.skill?.name)
|
||||
return !["Emprise sur les animaux", "Résistance", "Survie en extérieur"].includes(args.skill?.name)
|
@ -1,2 +1,2 @@
|
||||
const talents = await Promise.all(["Hardy"].map(game.wfrp4e.utility.findTalent))
|
||||
const talents = await Promise.all(["Dur à cuire"].map(game.wfrp4e.utility.findTalent))
|
||||
this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id})
|
@ -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'1 Point de Corruption", {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -1 +1 @@
|
||||
return args.skill?.name != "Language (Magick)"
|
||||
return args.skill?.name != "Langue (Magick)"
|
@ -8,6 +8,6 @@ if (args.test.preData.skillName?.includes(game.i18n.localize("NAME.Language")) |
|
||||
args.test.result.description = game.i18n.localize("ROLL.MarginalFailure");
|
||||
}
|
||||
args.test.result.outcome = "failure"
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Maximum -0 SL`)
|
||||
args.test.result.other.push(`<strong>${this.effect.name}</strong>: Maximum -0 DR`)
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.result.hitloc.value == this.item.system.location.key)
|
||||
{
|
||||
args.actor.addCondition("bleeding", 1);
|
||||
this.script.scriptNotification("Added Bleeding")
|
||||
}
|
||||
this.script.scriptNotification("Ajout de Hémorragique");
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
if (args.options.dodge)
|
||||
{
|
||||
args.abort = true;
|
||||
this.script.scriptNotification("Cannot Dodge!")
|
||||
this.script.scriptNotification("Ne peut pas esquiver!")
|
||||
}
|
||||
return ["t", "int", "wp", "fel"].includes(args.characteristic)
|
@ -10,10 +10,10 @@
|
||||
"wp" : 5,
|
||||
"fel" : 5
|
||||
}
|
||||
let skills = ["Intuition", "Lore (Local)", "Perception"]
|
||||
let skills = ["Intuition", "Savoir (Local)", "Perception"]
|
||||
let skillAdvancements = [10, 10, 10]
|
||||
let talents = []
|
||||
let trappings = ["Mail Coat", "Mail Chausses", "Mail Coif", "Hand Weapon"]
|
||||
let trappings = ["Cotte de Mailles", "Chausses de Mailles", "Coiffe de Mailles", "Arme simple"]
|
||||
let items = []
|
||||
|
||||
let updateObj = this.actor.toObject();
|
||||
@ -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})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -1,5 +1,5 @@
|
||||
if (args.test.options.fieldDressing && args.test.result.reversed)
|
||||
{
|
||||
args.test.data.result.SL = "+" + Math.min(1, Number(args.test.data.result.SL))
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: SL limited to 1`)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: DR limité à 1`)
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
|
||||
let fatigued = this.actor.hasCondition("fatigued")
|
||||
if (!fatigued)
|
||||
{
|
||||
this.actor.addCondition("fatigued")
|
||||
ui.notifications.notify("Fatigued added to " + this.actor.name + " which cannot be removed until the Malaise symptom is gone.")
|
||||
}
|
||||
let fatigued = this.actor.hasCondition("fatigued")
|
||||
if (!fatigued) {
|
||||
this.actor.addCondition("fatigued")
|
||||
ui.notifications.notify("Etat Fatigué ajouté à " + this.actor.name + " qui ne peut être enlevé tant que le symptôme de Malaise est présent.")
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes("skaven"))
|
||||
{
|
||||
args.addImpact = true;
|
||||
args.opposedTest.result.other.push("Impact against Skaven")
|
||||
args.opposedTest.result.other.push("Impact contre les Skavens")
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
if (!this.actor.effects.find(e => e.isCondition))
|
||||
{
|
||||
return this.script.scriptNotification("No Conditions on this Actor")
|
||||
return this.script.scriptNotification("Aucun état sur cet acteur")
|
||||
}
|
||||
|
||||
let choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, "Choose a Condition")
|
||||
let choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, "Choisissez un état")
|
||||
|
||||
if (choice[0])
|
||||
{
|
||||
|
@ -1 +1 @@
|
||||
return !(this.actor.attacker && (args.skill?.name.includes("Melee (Basic)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic")))
|
||||
return !(this.actor.attacker && (args.skill?.name.includes("Corps à corps (Base)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic")))
|
@ -1,3 +1,3 @@
|
||||
if (args.test.preData.options?.corruption && args.test.failed) {
|
||||
args.test?.result?.other.push("Gain additional +1 Corruption from " + this.effect.name)
|
||||
args.test?.result?.other.push("Reçoit 1 Point de Corruption de " + this.effect.name)
|
||||
}
|
@ -1,2 +1,2 @@
|
||||
this.actor.addCondition("fatigued");
|
||||
this.script.scriptNotification("Added Fatigued")
|
||||
this.script.scriptNotification("Ajout de Fatigué")
|
@ -1,5 +1,5 @@
|
||||
if (args.opposedTest.attackerTest.options.ballockKnife)
|
||||
{
|
||||
args.weaponProperties.impale = true;
|
||||
args.extraMessages.push(`<strong>${this.item.name}</strong>: Impale Added`)
|
||||
args.extraMessages.push(`<strong>${this.item.name}</strong>: Ajout de Empalement`)
|
||||
}
|
@ -5,10 +5,10 @@ if (args.actor.characteristics.fel.value <= 0)
|
||||
fel_gain += (await new Roll("2d10").roll()).total
|
||||
}
|
||||
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> gains ${i_gain} Intelligence`
|
||||
let msg = `<b>${this.actor.prototypeToken.name}</b> gagne ${i_gain} en Intelligence`
|
||||
|
||||
if (fel_gain)
|
||||
msg += ` and ${fel_gain} Fellowship`
|
||||
msg += ` et ${fel_gain} en Sociabilité`
|
||||
|
||||
|
||||
let newInt = i_gain + args.actor.characteristics.int.modifier
|
||||
|
@ -1,6 +1,6 @@
|
||||
let ablaze = this.actor.hasCondition("ablaze")
|
||||
if (ablaze)
|
||||
{
|
||||
this.script.scriptNotification("Immune to Ablaze");
|
||||
this.script.scriptNotification("Immunisé à En Flammes");
|
||||
ablaze.delete()
|
||||
}
|
@ -15,20 +15,20 @@ if (wounds.value > 0)
|
||||
{
|
||||
wounds.value = wounds.max
|
||||
}
|
||||
message += `<b>${this.actor.name}</b> regains ${regen} Wounds.`
|
||||
message += `<b>${this.actor.name}</b> guérit de ${regen} Points de Blessure.`
|
||||
|
||||
if (regen == 10)
|
||||
{
|
||||
message += `<br>Additionally, they regenerate a Critical Wound.`
|
||||
message += `<br>De plus, il guérit d'une Blessure Critique.`
|
||||
}
|
||||
}
|
||||
else if (regen >= 8)
|
||||
{
|
||||
message += `<b>${this.actor.name}</b> rolled a ${regen} and regains 1 Wound.`
|
||||
message += `<b>${this.actor.name}</b> a obtenu un ${regen} et guérit 1 Point de Blessure.`
|
||||
wounds.value += 1
|
||||
if (regen == 10)
|
||||
{
|
||||
message += `<br>Additionally, they regenerate a Critical Wound.`
|
||||
message += `<br>De plus, il guérit d'une Blessure Critique.`
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1,13 +1,13 @@
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells", true);
|
||||
let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts", true);
|
||||
|
||||
let choice = await ItemDialog.create(spells, 1);
|
||||
|
||||
if (choice[0])
|
||||
{
|
||||
this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)
|
||||
this.script.scriptMessage(`Choisir @UUID[${choice[0].uuid}]{${choice[0].name}}`)
|
||||
let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure
|
||||
setProperty(spell, "flags.wfrp4e.boonOfTzeentch", true);
|
||||
spell.system.wind.value = "Channelling (Dhar)";
|
||||
spell.system.wind.value = "Focalisation (Dhar)";
|
||||
spell.system.memorized.value = true;
|
||||
this.actor.createEmbeddedDocuments("Item", [spell], {fromEffect: this.effect.id})
|
||||
}
|
@ -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 Damage from all fire)"})
|
||||
halve = await Dialog.confirm({title : this.effect.name, content : "Diviser les Dégâts? (Divise les dégats de Feu)"})
|
||||
}
|
||||
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é", value : "× 0.5"})
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
let wounds = this.actor.itemTypes.disease.filter(i => i.name == "Festering Wound" && i.system.duration.active);
|
||||
let wounds = this.actor.itemTypes.disease.filter(i => i.name == "Blessure Purulente" && i.system.duration.active);
|
||||
let selected;
|
||||
if (wounds.length == 0)
|
||||
{
|
||||
return this.script.scriptNotification("No Festering Wounds!");
|
||||
return this.script.scriptNotification("Aucune Blessure Purulente!");
|
||||
}
|
||||
else if (wounds.length == 1)
|
||||
{
|
||||
@ -23,7 +23,7 @@ if (selected)
|
||||
if (SL >= 0)
|
||||
{
|
||||
selected.update({"system.duration.value" : selected.system.duration.value - SL})
|
||||
this.script.scriptMessage(`<strong>${selected.name}</strong> duration reduced by ${SL}!`)
|
||||
this.script.scriptMessage(`<strong>${selected.name}</strong> durée réduite de ${SL}!`)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS")
|
||||
let data = item.toObject();
|
||||
data.name = data.name += " (Vision)"
|
||||
data.name = data.name += " (Vue)"
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -1 +1 @@
|
||||
return ["Pick Lock", "Sleight of Hand", "Channelling (Ulgu)"].includes(args.skill?.name)
|
||||
return ["Crochetage", "Escamotage", "Focalisation (Ulgu)"].includes(args.skill?.name)
|
@ -9,7 +9,7 @@ let filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 1, "Choose an appropriate Polearm or Two-Handed Weapon")
|
||||
let items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 1, "Choisissez une Arme d'Hast ou à Deux Mains")
|
||||
items = items.map(i => i.toObject())
|
||||
|
||||
items.forEach(i => equip(i))
|
||||
|
@ -2,4 +2,4 @@ let caster = this.effect.sourceActor;
|
||||
|
||||
this.actor.modifyWounds(caster.system.characteristics.fel.bonus);
|
||||
|
||||
this.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);
|
||||
this.script.scriptMessage(`Guérison de ${caster.system.characteristics.fel.bonus} Blessures`);
|
@ -6,6 +6,6 @@ if (args.test.characteristicKey == "wp")
|
||||
let data = item.toObject();
|
||||
this.actor.createEmbeddedDocuments("Item", [data])
|
||||
|
||||
this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)
|
||||
this.script.scriptMessage(`Test de Force Mentale échoué, <b>${this.actor.prototypeToken.name}</b> @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] pour [[1d10]] heures`)
|
||||
}
|
||||
}
|
@ -10,10 +10,10 @@ let characteristics = {
|
||||
"wp" : 5,
|
||||
"fel" : 5
|
||||
}
|
||||
let skills = ["Cool", "Dodge"]
|
||||
let skills = ["Calme", "Esquive"]
|
||||
let skillAdvancements = [10, 10]
|
||||
let talents = ["Combat Reflexes", "Resolute"]
|
||||
let trappings = ["Leather Jack", "Leather Leggings", "Leather Skullcap", "Hand Weapon", "Spear", "Shield"]
|
||||
let talents = ["Vigilance", "Déterminé"]
|
||||
let trappings = ["Veste de cuir", "Jambières de cuir", "Callote de cuir", "Arme simple", "Lance", "Bouclier"]
|
||||
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})
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,7 +65,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})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
let talent = this.actor.has("Arcane Magic (Light)", "talent")
|
||||
let talent = this.actor.has("Magie des Arcanes (Lumière)", "talent")
|
||||
let demon = this.actor.has(game.i18n.localize("NAME.Daemonic"))
|
||||
|
||||
if (!talent)
|
||||
|
@ -2,11 +2,11 @@ let criticals = this.actor.itemTypes.critical;
|
||||
|
||||
if (criticals.length)
|
||||
{
|
||||
this.script.scriptNotification("Cannot suffer Critical Wounds");
|
||||
this.script.scriptNotification("Ne peut subir de Blessures Critiques");
|
||||
this.actor.deleteEmbeddedDocuments("Item", criticals.map(i => i.id))
|
||||
}
|
||||
|
||||
if (getProperty(args.data, "system.status.wounds.value") == 0)
|
||||
{
|
||||
this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)
|
||||
this.script.scriptNotification(`Endormi pour ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)
|
||||
}
|
@ -3,6 +3,6 @@ let choice = await ItemDialog.create(ItemDialog.objectToArray({
|
||||
t : game.wfrp4e.config.characteristics.t,
|
||||
ag : game.wfrp4e.config.characteristics.ag,
|
||||
wp : game.wfrp4e.config.characteristics.wp
|
||||
}, this.effect.img), 1, "Choose Characteristic");
|
||||
}, this.effect.img), 1, "Choisir une caractéristique");
|
||||
|
||||
this.effect.updateSource({"flags.wfrp4e.characteristic" : choice[0].id})
|
@ -7,10 +7,10 @@ if (args.test.options.staunchBleeding)
|
||||
{
|
||||
staunch = Math.min(1, Number(args.test.result.SL)) + 1
|
||||
}
|
||||
args.test.result.other.push(`<b>${this.actor.name}</b> removed <b>${staunch}</b> Bleeding conditions from the patient.`)
|
||||
args.test.result.other.push(`<b>${this.actor.name}</b> guérit <b>${staunch}</b> états Hémorragiques du patient.`)
|
||||
}
|
||||
else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)
|
||||
{
|
||||
args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)
|
||||
args.test.result.other.push(`Le patient est victime d'une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (!this.actor.has("Night Vision") && !this.actor.has("Night Vision", "talent") && !this.actor.hasCondition("blinded"))
|
||||
if (!this.actor.has("Vision Nocturne") && !this.actor.has("Vision Nocturne", "talent") && !this.actor.hasCondition("blinded"))
|
||||
{
|
||||
this.actor.addCondition("blinded", 1, {"flags.wfrp4e.nightshroud" : true})
|
||||
}
|
@ -1,16 +1,16 @@
|
||||
|
||||
let choice = await Dialog.wait({
|
||||
title: this.effect.name,
|
||||
content: `<p><strong>${this.effect.name}</strong>: Is this a ranged or magical attack that orignates outside the Dome?</p>`,
|
||||
content: `<p><strong>${this.effect.name}</strong>: Est-ce que l'attaque magique ou à distance provient de l'extérieur du Dome?</p>`,
|
||||
buttons: {
|
||||
yes: {
|
||||
label: "Yes",
|
||||
label: "Oui",
|
||||
callback: () => {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
no: {
|
||||
label: "No",
|
||||
label: "Non",
|
||||
callback: () => {
|
||||
return false;
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target))
|
||||
{
|
||||
if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target)) {
|
||||
|
||||
let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
|
||||
if (ones > SL)
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)
|
||||
if (ones > SL) {
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Utilise le dé d'unité comme DR`)
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (this.actor.has("Undead") || this.actor.has("Daemonic"))
|
||||
if (this.actor.has("Mort-vivant") || this.actor.has("Démoniaque"))
|
||||
{
|
||||
this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);
|
||||
this.script.scriptNotification(`Ne peut entrer ${this.effect.name}!`);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
if (this.actor.hasCondition("surprised"))
|
||||
{
|
||||
this.script.scriptNotification("Cannot be surprised");
|
||||
this.script.scriptNotification("Ne peut être surpris");
|
||||
this.actor.removeCondition("surprised");
|
||||
}
|
@ -5,7 +5,7 @@ let nightVision = (await fromUuid("Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm
|
||||
let tracker = (await fromUuid("Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp")).toObject()
|
||||
let weapon = (await fromUuid("Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM")).toObject()
|
||||
|
||||
armour.name = "Armour (Hide)"
|
||||
armour.name = "Armure (Caché)"
|
||||
armour.system.specification.value = 2
|
||||
bite.system.specification.value = 3
|
||||
fear.system.specification.value = 2
|
||||
@ -26,12 +26,12 @@ let regenerate = (await fromUuid("Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR"
|
||||
let size = (await fromUuid("Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q")).toObject()//{Size (Large)}
|
||||
|
||||
blessed.system.specification.value = "Ulric"
|
||||
size.system.specification.value = "Large"
|
||||
size.system.specification.value = "Grande"
|
||||
|
||||
let optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];
|
||||
|
||||
let chosen = await ItemDialog.create(optional, "unlimited", "Choose Optional Traits");
|
||||
let chosen = await ItemDialog.create(optional, "unlimited", "Choisissez un Trai optionnel");
|
||||
|
||||
items = items.concat(chosen || [])
|
||||
this.script.scriptNotification(`Adding ${items.map(i => i.name).join(", ")}`);
|
||||
this.script.scriptNotification(`Ajout de ${items.map(i => i.name).join(", ")}`);
|
||||
this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id})
|
||||
|
@ -1,9 +1,9 @@
|
||||
if (this.actor.hasCondition("bleeding"))
|
||||
{
|
||||
this.actor.removeCondition("bleeding");
|
||||
this.script.scriptNotification("Removed 1 Bleeding Condition")
|
||||
this.script.scriptNotification("Suppression d'1 état Hémmoragique")
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("No Bleeding Conditions");
|
||||
this.script.scriptNotification("Aucun état Hémorragique");
|
||||
}
|
@ -5,10 +5,10 @@ if (this.item.system.quantity.value)
|
||||
let effectData = this.item.effects.contents[0].convertToApplied();
|
||||
let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;
|
||||
effectData.duration.seconds = 60 * minutes
|
||||
this.script.scriptMessage(`<strong>Duration</strong>: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage(`<strong>Durée</strong>: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
actor.applyEffect({effectData : [effectData]})
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("None left!", "error")
|
||||
this.script.scriptNotification("Aucun disponible!", "error")
|
||||
}
|
@ -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 += 30;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
let location = this.item.system.location.key
|
||||
let test = await this.actor.setupCharacteristic("dex", {context : {failure : `<strong>${this.effect.name}</strong>: Drop the item!`}, skipTargets: true, appendTitle : " - " + this.effect.name, fields : {difficulty : "average"}})
|
||||
let test = await this.actor.setupCharacteristic("dex", {context : {failure : `<strong>${this.effect.name}</strong>: Lâche l'objet!`}, skipTargets: true, appendTitle : " - " + this.effect.name, fields : {difficulty : "average"}})
|
||||
await test.roll();
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ if (location && test.failed)
|
||||
|
||||
if (dropped.length)
|
||||
{
|
||||
this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(", ")}!`)
|
||||
this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(", ")}!`)
|
||||
for(let weapon of dropped)
|
||||
{
|
||||
await weapon.system.toggleEquip();
|
||||
|
@ -1,12 +1,12 @@
|
||||
// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor
|
||||
|
||||
let mainEffect = this.item.effects.contents[0];
|
||||
if (mainEffect.name.includes("<Lore>"))
|
||||
if (mainEffect.name.includes("<Savoir>"))
|
||||
{
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, "Choose Lore");
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, "Choisissez le Savoir");
|
||||
if (choice.length)
|
||||
{
|
||||
mainEffect.update({name : mainEffect.name.replace("<Lore>", choice[0].name)})
|
||||
mainEffect.update({name : mainEffect.name.replace("<Savoir>", choice[0].name)})
|
||||
this.item.update({name : this.item.name += ` (${choice[0].name})`})
|
||||
}
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
args.abort = true;
|
||||
this.script.scriptNotification(`Cannot use ${this.item.system.location.value}!`, "error")
|
||||
this.script.scriptNotification(`Ne peut utiliser ${this.item.system.location.value}!`, "error")
|
@ -2,5 +2,5 @@ let ablaze = this.actor.hasCondition("ablaze");
|
||||
if (ablaze)
|
||||
{
|
||||
ablaze?.delete();
|
||||
this.script.scriptNotification("Ignore Ablaze");
|
||||
this.script.scriptNotification("Ignore En Flammes");
|
||||
}
|
||||
|
@ -7,5 +7,5 @@ if (!this.actor.items.getName(game.i18n.localize("NAME.Frenzy"))) // Either fren
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})
|
||||
}
|
||||
|
||||
this.script.scriptMessage(`<p><strong>By imbibing this potion, ${this.actor.prototypeToken.name}</strong> has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.</p>`,
|
||||
this.script.scriptMessage(`<p><strong>En buvant cette potion, ${this.actor.prototypeToken.name}</strong> est devenu sujet à la Frénesie. Cette Frénésie dure [[1d10]] Rounds, et ne peut pas se terminer avant.</p>`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN")
|
||||
let data = item.toObject();
|
||||
data.name = data.name.replace("Target", "Greenskins, Undead, Chaos")
|
||||
data.name = data.name.replace("Cible", "Peaux vertes, Mort-vivant, Chaos")
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -1,10 +1,10 @@
|
||||
if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target))
|
||||
{
|
||||
if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get("wfrp4e", "automaticSuccess") || args.test.result.roll <= args.test.target)) {
|
||||
|
||||
let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
|
||||
if (ones > SL)
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)
|
||||
if (ones > SL) {
|
||||
args.test.data.result.SL = "+" + (ones + args.test.successBonus + args.test.slBonus)
|
||||
args.test.result.other.push(`<b>${this.effect.name}</b>: Utilise le dé d'unité comme DR`)
|
||||
}
|
||||
}
|
@ -14,11 +14,11 @@ let index = game.packs
|
||||
return i
|
||||
})
|
||||
|
||||
let choice = await ItemDialog.create(index, 1, "Choose a Trade Skill")
|
||||
let choice = await ItemDialog.create(index, 1, "Choisissez une compétence Métier")
|
||||
let text;
|
||||
if (!choice[0])
|
||||
{
|
||||
let custom = await ValueDialog.create("Enter Custom Trade Skill", "Custom Trade");
|
||||
let custom = await ValueDialog.create("Saisissez une spécialisation de Métier", "Custom Trade");
|
||||
text = custom || ""
|
||||
}
|
||||
else
|
||||
|
@ -1,4 +1,4 @@
|
||||
let test = await this.actor.setupSkill("Dodge", {fields : {difficulty : "average"}})
|
||||
let test = await this.actor.setupSkill("Esquive", {fields : {difficulty : "average"}})
|
||||
let caster = this.effect.sourceActor
|
||||
|
||||
let fallen = this.effect.sourceTest.result.SL + caster.characteristics.wp.bonus
|
||||
@ -6,5 +6,5 @@ await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
this.actor.addCondition("prone")
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> falls ${fallen} yards`)
|
||||
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> tombe de ${fallen} mètres`)
|
||||
}
|
@ -2,11 +2,11 @@ let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? "r" : "l") + "
|
||||
|
||||
if (location == "lArm")
|
||||
{
|
||||
this.script.scriptNotification("Rolled Left")
|
||||
this.script.scriptNotification("Résultat : gauche")
|
||||
}
|
||||
else if (location == "rArm")
|
||||
{
|
||||
this.script.scriptNotification("Rolled Right")
|
||||
this.script.scriptNotification("Résultat : Droite")
|
||||
}
|
||||
|
||||
this.effect.updateSource({"flags.wfrp4e.location" : location});
|
||||
@ -17,7 +17,7 @@ if (location)
|
||||
|
||||
if (dropped.length)
|
||||
{
|
||||
this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(", ")}!`)
|
||||
this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(", ")}!`)
|
||||
for(let weapon of dropped)
|
||||
{
|
||||
await weapon.system.toggleEquip();
|
||||
@ -27,6 +27,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,8 +1,8 @@
|
||||
this.actor.has("Immunity to Psychology")?.delete();
|
||||
this.actor.has("Immunité Psychologique")?.delete();
|
||||
|
||||
let roll = await new Roll("1d10").roll();
|
||||
|
||||
roll.toMessage(this.script.getChatData());
|
||||
|
||||
this.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)
|
||||
this.script.scriptNotification(`Immunité Psychologique a été supprimé de l'acteur, ajout de ${roll.total} états Brisé`)
|
||||
this.actor.addCondition("broken", roll.total, {"flags.wfrp4e.blasted-mind" : true})
|
@ -1 +1 @@
|
||||
return args.skill?.name.includes("Melee (Basic)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic");
|
||||
return args.skill?.name.includes("Corps à corps (Base)") || (args.type == "weapon" && args.item?.system.weaponGroup.value == "basic");
|
@ -5,7 +5,7 @@ if (this.item.name.includes("("))
|
||||
}
|
||||
else
|
||||
{
|
||||
resistance = await ValueDialog.create("Enter Resistance", "Resistance")
|
||||
resistance = await ValueDialog.create("Entrez la Résistance", "Résistance")
|
||||
|
||||
if (resistance)
|
||||
{
|
||||
@ -13,7 +13,7 @@ else
|
||||
this.effect.updateSource({name : this.effect.name + ` (${resistance})`})
|
||||
}
|
||||
}
|
||||
this.item.updateSource({"system.tests.value" : this.item.system.tests.value.replace("the associated Threat", resistance)})
|
||||
this.item.updateSource({"system.tests.value" : this.item.system.tests.value.replace("menace associée", resistance)})
|
||||
|
||||
if (resistance && !this.effect.name.includes("("))
|
||||
{
|
||||
|
@ -3,5 +3,5 @@ if (args.applyAP && nonmagical)
|
||||
{
|
||||
let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical
|
||||
args.modifiers.ap.ignored += nonmagical
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore Non-Magical AP (" + nonmagical + ")");
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore les PA non-magiques (" + nonmagical + ")");
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user