From 909c19f8cbe90db2edb70cc5c0365eff8cf42c6a Mon Sep 17 00:00:00 2001 From: sladecraven Date: Thu, 26 Aug 2021 21:01:54 +0200 Subject: [PATCH] Sync to 4.2.0 --- compendium/wfrp4e-core.prayers.json | 4 +-- compendium/wfrp4e-core.spells.json | 42 +++++++++++++-------------- fr.json | 45 ++++++++++++++++++++++++++++- module.json | 2 +- tools/detect_missing_strings.lua | 2 +- 5 files changed, 69 insertions(+), 26 deletions(-) diff --git a/compendium/wfrp4e-core.prayers.json b/compendium/wfrp4e-core.prayers.json index 5fabc5e..c0a0009 100644 --- a/compendium/wfrp4e-core.prayers.json +++ b/compendium/wfrp4e-core.prayers.json @@ -224,7 +224,7 @@ { "key": "data.characteristics.fel.modifier", "mode": 2, - "value": "" + "value": "10" } ], "disabled": false, @@ -306,7 +306,7 @@ { "key": "data.characteristics.dex.modifier", "mode": 2, - "value": "" + "value": "10" } ], "disabled": false, diff --git a/compendium/wfrp4e-core.spells.json b/compendium/wfrp4e-core.spells.json index a9de5dc..551db86 100644 --- a/compendium/wfrp4e-core.spells.json +++ b/compendium/wfrp4e-core.spells.json @@ -2197,7 +2197,7 @@ "effectTrigger": "preTakeDamage", "preventDuplicateEffects": false, "script": "if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.attackType == \"melee\") || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\n{\n args.actor.status.armour[args.opposedTest.result.hitloc.value].value += {{SL}}\n}" - } + } }, "icon": "modules/wfrp4e-core/icons/spells/cerulean-shield.png", "label": "Bouclier céruléen", @@ -2221,8 +2221,8 @@ "effectApplication": "apply", "effectTrigger": "preOpposedDefender", "preventDuplicateEffects": false, - "script": "if ((args.attackerTest.weapon && args.attackerTest.weapon.attackType == \"melee\") || (args.attackerTest.trait && !args.attackerTest.trait.name.includes(\"Ranged\")))\n{\n let content = `${args.attackerTest.actor.token.name} takes ${this.actor.characteristics.wp.bonus} Damage from Cerulean Shield if they used a metal weapon.`\n args.opposedTest.result.other.push(content);\n}" - } + "script": "if ((args.attackerTest.weapon && args.attackerTest.weapon.attackType == \"melee\") || (args.attackerTest.trait && !args.attackerTest.trait.name.includes(\"Ranged\")))\n{\n let content = `${args.attackerTest.actor.data.token.name} reçoit ${this.actor.characteristics.wp.bonus} Dégats du Bouclier Céruléen si il utilise une arme en métal.`\n args.opposedTest.result.other.push(content);\n}" + } }, "icon": "modules/wfrp4e-core/icons/spells/cerulean-shield.png", "label": "Cerulean Damage", @@ -3586,7 +3586,7 @@ "effectTrigger": "oneTime", "preventDuplicateEffects": false, "script": "if (!this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))\n return \nfromUuid(this.effect.origin).then(caster => {\n if (caster)\n {\n let wp = caster.characteristics.wp\n if (this.actor.characteristics.wp.value >= wp.value)\n return\n this.actor.applyBasicDamage(wp.bonus, { damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL})\n }\n})" - } + } }, "icon": "modules/wfrp4e-core/icons/spells/destroy-lesser-daemon.png", "label": "Destruction de Démon Mineur", @@ -3623,7 +3623,7 @@ "effectApplication": "apply", "effectTrigger": "oneTime", "preventDuplicateEffects": true, - "script": "args.prefillModifiers.modifier -= 20" + "script": "let item = await fromUuid(\"Compendium.wfrp4e-core.traits.MVI0lXcg6vvtooAF\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])" } }, "icon": "modules/wfrp4e-core/icons/blank.png", @@ -4566,7 +4566,7 @@ "name": "Dernières paroles" }, { - "description": "

Pour lancer ce Sort, vous devez être debot et pieds nus, en contact direct avec la terre. Pour la durée du Sort, toutes les créatures également en contact direct avec la terre à l'intérieur de la Zone d'Effet guérisseent d'un nombre de Blessures égal à votre Bonus de Force Mentale au début de chaque round.

", + "description": "

Pour lancer ce Sort, vous devez être debout et pieds nus, en contact direct avec la terre. Pour la durée du Sort, toutes les créatures également en contact direct avec la terre à l'intérieur de la Zone d'Effet guérisseent d'un nombre de Blessures égal à votre Bonus de Force Mentale au début de chaque round.

", "effects": [ { "_id": "c32DjCbePouMb7cz", @@ -4585,8 +4585,8 @@ "effectApplication": "apply", "effectTrigger": "endRound", "preventDuplicateEffects": false, - "script": "fromUuid(this.effect.origin).then(caster => {\n if (caster)\n {\n let bonus = caster.characteristics.wp.bonus\n let wounds = duplicate(this.actor.status.wounds)\n wounds.value += bonus\n if (wounds.value > wounds.max)\n wounds.value = wounds.max\n this.actor.update({\"data.status.wounds\" : wounds})\n ChatMessage.create({content: `${this.actor.data.token.name} gagne ${bonus} Blessures (si en contact direct avec le sol)`, speaker : {alias : this.effect.label}})\n }\n})" - } + "script": "fromUuid(this.effect.origin).then(caster => {\n if (caster)\n {\n let bonus = caster.characteristics.wp.bonus\n this.actor.modifyWounds(bonus)\n\n ChatMessage.create({content: `${this.actor.data.token.name} regagne ${bonus} Points de Blessures (si en contact direct avec la Terre)`, speaker : {alias : this.effect.label}})\n }\n})" + } }, "icon": "modules/wfrp4e-core/icons/spells/earthblood.png", "label": "Sang de la Terre", @@ -4603,7 +4603,7 @@ "effectTrigger": "oneTime", "lore": true, "script": "\n fromUuid(this.effect.origin).then(caster => {\n if (this.actor.isOwner)\n {\n if (!this.actor.has(game.i18n.localize(\"NAME.Daemonic\")) && !this.actor.has(game.i18n.localize(\"NAME.Undead\")))\n {\n let bleeding = this.actor.hasCondition(\"bleeding\")\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (bleeding) this.actor.removeCondition(\"bleeding\", bleeding.flags.wfrp4e.value)\n if (fatigued) this.actor.removeCondition(\"fatigued\", fatigued.flags.wfrp4e.value)\n }\n else if (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\n this.actor.applyBasicDamage(caster.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n }\n })" - } + } }, "icon": "modules/wfrp4e-core/icons/spells/life.png", "label": "Domaine de la Vie", @@ -5236,8 +5236,8 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" - } + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + } }, "icon": "modules/wfrp4e-core/icons/blank.png", "label": "Effrayant", @@ -5316,7 +5316,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/daemonology.png", @@ -5348,7 +5348,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/death.png", @@ -5396,7 +5396,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/fire.png", @@ -5444,7 +5444,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliqur l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/heavens.png", @@ -5492,7 +5492,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/life.png", @@ -5540,7 +5540,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/light.png", @@ -5588,7 +5588,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/metal.png", @@ -5636,7 +5636,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/necromancy.png", @@ -5668,7 +5668,7 @@ "effectApplication": "apply", "effectTrigger": "invoke", "preventDuplicateEffects": false, - "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Select a target to apply the effect.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" + "script": "let value = 1\nlet name = this.actor.data.token.name\n\nif (game.user.isGM)\n{\nif (!game.user.targets.size)\n return ui.notifications.warn(\"Sélectionnez une cible pour appliquer l'effet.\")\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}" } }, "icon": "modules/wfrp4e-core/icons/spells/shadow.png", @@ -5758,7 +5758,7 @@ "effectApplication": "damage", "effectTrigger": "applyDamage", "lore": true, - "script": "\n let applyAP = (args.damageType == game.wfrp4e.config.DAMAGE_TYPE.IGNORE_TB || args.damageType == game.wfrp4e.config.DAMAGE_TYPE.NORMAL)\n\n let AP = args.AP\n let metalValue = 0;\n for (let layer of AP.layers) {\n if (layer.metal) {\n metalValue += layer.value\n }\n }\n \n \n if (metalValue)\n args.messageElements.push(\"-2 Metal Armour\")\n args.totalWoundLoss += metalValue\n \n if (applyAP) {\n \n args.totalWoundLoss += metalValue\n let newUsed = AP.used - metalValue;\n \n let apIndex = args.messageElements.findIndex(i => i.includes(game.i18n.localize(\"AP\")))\n args.messageElements[apIndex] = newUsed + \"/\" + AP.value + \" \" + game.i18n.localize(\"AP\")\n }\n " + "script": "\n let applyAP = (args.damageType == game.wfrp4e.config.DAMAGE_TYPE.IGNORE_TB || args.damageType == game.wfrp4e.config.DAMAGE_TYPE.NORMAL)\n\n let AP = args.AP\n let metalValue = 0;\n for (let layer of AP.layers) {\n if (layer.metal) {\n metalValue += layer.value\n }\n }\n \n \n if (metalValue)\n args.messageElements.push(\"-2 aux Armures en Métal\")\n args.totalWoundLoss += metalValue\n \n if (applyAP) {\n \n args.totalWoundLoss += metalValue\n let newUsed = AP.used - metalValue;\n \n let apIndex = args.messageElements.findIndex(i => i.includes(game.i18n.localize(\"AP\")))\n args.messageElements[apIndex] = newUsed + \"/\" + AP.value + \" \" + game.i18n.localize(\"AP\")\n }\n " } }, "icon": "modules/wfrp4e-core/icons/spells/metal.png", diff --git a/fr.json b/fr.json index 2bf6410..cec58af 100644 --- a/fr.json +++ b/fr.json @@ -66,6 +66,49 @@ "SETTINGS.AdvantageBonusHint": "Configurer le bonus donné par l'avantage", "SETTINGS.AdvantageBonus": "Bonus d'avantage", + "SETTINGS.MooSizeDamageHint":"Les bonus de dommages sont liés à la taille absolue, au lieu des différences de taille relatives (voir la page de Wiki en lien ci-dessus)", + "SETTINGS.MooHomebrewItems":"Modifications d'Items", + "SETTINGS.MooHomebrewItemHint":"Change (avec l'application des règles ci-dessus) différents obejts. Voir la page de Wiki indiquée ci-dessus. **ATTENTION: A n'activer que sur un nouveau monde, et avec la plupart des règles ci-dessus activées**", + "SETTINGS.MooAdvantage":"Avantage", + "SETTINGS.MooAdvantageHint":"Au lieu de +10 avantage, vous gagnez +1DR par Avantage sur un test réussi", + "SETTINGS.MooDifficulty":"Options de difficulté", + "SETTINGS.MooDifficultyHint":"Les difficultés sont symétriques", + "SETTINGS.MooCritsFumbles":"Critiques de MooMan", + "SETTINGS.MooCritsFumblesHint":"MooCritsFumblesHint", + "SETTINGS.MooConditions":"Changement sur les états", + "SETTINGS.MooConditionsHint":"Modifie divers textes d'états", + "SETTINGS.MooConditionTriggers":"Déclenchement d'Etat", + "SETTINGS.MooConditionTriggersHint":"Les états s'activent à la fin du tour du joueur, au lieu de la fin du round.", + "SETTINGS.MooCritModifiers":"Modificateurs de Tables de Critiques", + "SETTINGS.MooCritMOdifiersHint":"Lorsque vous encaissez des dommages en dessous de 0 Point de Blessure, ajoutez ou soustrayez 10 du jet sur la table des Coups Critiques pour chaque points de dommages soustrait de votre Bonus d'Endurance.

Ex. J'ai 4 Points de Blessures restants , 50 en Endurance. J'encaisse 12 Dommages. Cela implique -8. Avec un BE de 5, cela entraîne un +30 sur la table des Coups Critiques.

Ex. J'ai 4 Points de Blessures restants , 50 en Endurance. J'encaisse 5 Dommages. Cela implique -1. Avec un BE de 5, cela entraine un -40 sur la table des Coups Critiques.", + "SETTINGS.MooSLDamage":"Calcule des dommages opposés", + "SETTINGS.MooSLDamageHint":"Le calcule des dommages est basé uniquement sur le DR de l'attaquant, au lieu de la différence attaquant/défenseur", + "SETTINGS.MooRangedDamage":"Modification des dommages des projectiles", + "SETTINGS.MooRangedDamageHint":"Les dommages des projectiles est modifié par les dizaines de la difficultée appliquée : +20 = -2 dommages, -30 = +3 dommages", + "SETTINGS.MooMagicAdvantage":"Modification des Avantages en Magie", + "SETTINGS.MooMagicAdvantageHint":"Les Avantages s'appliquent à la Folcalisation et pas à l'Incantation. Les avantages sont toujours gagnés grâce à l'Incantation.", + "SETTINGS.MooOvercasting":"Dépenses des Sur-Incantation", + "SETTINGS.MooOvercastingHint":"Les Sur-Incantations dépensent le DR utilisé, donc si le sort fait des dommages, pour chaque Sur-Incantation utilisée, le sort fait -2 Dommages, et est plus facile à opposer", + "SETTINGS.MooCatastrophicMiscasts":"Incantations Imparfaites Catastrophiques", + "SETTINGS.MooCatastrophicMiscastsHint":"Ajoute la table des Incantations Imparfaites Catastrophiques et modifie les tables existantes. De plus, obtenir un 100 sur une Incantation ou une Focalisation augmente le niveau d'Incantations Imparfaites de 1", + "SETTINGS.MooCriticalChannelling":"Focalisation Critique", + "SETTINGS.MooCriticalChannellingHint":"Si vous incantez un sort avec succès à partir d'une Focalisation critique, vous ajoutez +DR égaux au NI du sort. Ces DR ne peuvent pas être utilisés pour Sur-Incanter, seulement le DR généré par le test. Si le Test d'Incantation échoue, vous faites un Incantation Imparfaite ou ce la incrémente l'Incantation Imparfaite de 1.", + "SETTINGS.MooCastAfterChannelling":"Incanter après la Focalisation", + "SETTINGS.MooCastAfterChannellingHint":"Lors de l'incantation d'un sort Focalisé, une incantation échouée compte comme une interruption. Vous pouvez conserver les DR focalisés si ce Test est échoué.", + "SETTINGS.MooPenetrating":"Valeur de Pénétration", + "SETTINGS.MooPenetratingHint":"Ajoute une valeur à l'option Pénétrante, Pénétrante X - où l'arme ignore X PA (si aucun chiffre n'est indiqué, la valeur par défaut est de 2)", + "SETTINGS.MooQualities":"Nouvelles Qualités", + "SETTINGS.MooQualitiesHint":"Ajout les qualités 'Simple' et 'Elan'", + "SETTINGS.MooShieldAP":"PA des Boucliers", + "SETTINGS.MooShieldAPHint":"Les PA des boucliers et l'atténuation des critiques (cf. ci-dessous) sont appliqués uniquement si vous réussissez un test défensif.", + "SETTINGS.MooCriticalMitigation":"Atténuation des Critiques", + "SETTINGS.MooCriticalMitigationHint":"(Au lieu de la Déviation) Lorsque vous subissez un Coup Critique, pour chaque PA dans la localisation, le lancer sur la table des Blessures Critiques est réduit de 10. Si le résultat du jet est négatif, aucune blessure critique n'est reçue. Après que la blessure critique ait été résolue, la couche d'armure la plus externe est endommagé et ses PA réduits de 1. Cela s'applique uniquement si l'attaquant a ciblé la localisation.", + "SETTINGS.MooRangeBands":"Modificateurs de Portée des Projectiles", + "SETTINGS.MooRangeBandsHint":"Les projectiles ont une portée optimale, correspodant à une des distances de portée. Cibler une créature dans hors de cette portée impliquer des malus. Consulter le Wiki pour plus de détails.", + "SETTINGS.MooSizeDamage":"Taille et calcul des dommages", + + "ROLL.CatastrophicMis":"Incantations Imparfaites Catastrophiques", + "SHEET.Close" : "Fermer", "SHEET.Configure" : "Configurer la feuille", "SHEET.Token" : "Configurer le Token", @@ -200,8 +243,8 @@ "ITEM.TypeContainer": "Conteneur", "ITEM.TypePrayer": "Prière", "ITEM.TypeTrapping": "Equipement", + "ITEM.OptimalRange": "Portée optimale", - "Basic" : "Basic", "Advanced" : "Avancée", "Qualities" : "Atouts", "Flaws" : "Défauts", diff --git a/module.json b/module.json index d3cb898..c9dea1e 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "name": "WH4-fr-translation", "title": "WFRP4e - Core Module en français.", "description": "Traduction Française pour Warhammer v4.", - "version": "4.1.3", + "version": "4.2.0", "minimumCoreVersion" : "0.8.0", "compatibleCoreVersion": "0.8.9", "author": "LeRatierBretonnien", diff --git a/tools/detect_missing_strings.lua b/tools/detect_missing_strings.lua index 4184482..74b1493 100644 --- a/tools/detect_missing_strings.lua +++ b/tools/detect_missing_strings.lua @@ -14,7 +14,7 @@ fp:close() for tag, value in pairs(entags) do if not frtags[tag] then - print(tag, value) + print('"'..tag..'":"'.. value..'",') end end