From 3e242bf0a416f6dc299cc56ecdac96b4b48a7c43 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Fri, 10 Apr 2020 15:11:26 +0200 Subject: [PATCH] Better spells handling --- babele-register.js | 49 +++++++++++++++++++++++++++++++---- compendium/wfrp4e.skills.json | 2 +- compendium/wfrp4e.spells.json | 22 ++++++++++++++-- fr.json | 30 ++++++++++++++++++--- 4 files changed, 91 insertions(+), 12 deletions(-) diff --git a/babele-register.js b/babele-register.js index 13a24ef..d9932c2 100644 --- a/babele-register.js +++ b/babele-register.js @@ -11,7 +11,7 @@ Hooks.once('init', () => { Babele.get().registerConverters({ "career_skills": (skills_list) => { - console.log( game.i18n.localize( "Any" ) ); + console.log( "Thru here ..." ); var compendium = game.packs.find(p => p.collection === 'wfrp4e.skills'); var i; var len = skills_list.length; @@ -24,8 +24,8 @@ Hooks.once('init', () => { //console.log("Matched/split:", res[1], res[2]); var subword = game.i18n.localize(res[2].trim() ); var s1 = res[1].trim() + " ()"; - var translw = compendium.i18nName( s1 ); - if (translw != transl) { + var translw = compendium.i18nName( s1 ); + if (translw != s1) { var res2 = re.exec(translw); transl = res2[1] + "(" + subword + ")"; } else { @@ -54,7 +54,7 @@ Hooks.once('init', () => { var subword = game.i18n.localize(res[2].trim() ); var s1 = res[1].trim(); // No () in talents table var translw = compendium.i18nName( s1 ); - if (translw != transl) { + if (translw != s1) { transl = translw + "(" + subword + ")"; } else { s1 = res[1].trim() + " ( )"; @@ -72,7 +72,7 @@ Hooks.once('init', () => { "generic_localization": (value) => { if ( value ) return game.i18n.localize( value.trim() ); - }, + }, "trapping_qualities_flaws": (value) => { if ( value ) { var list = value.split( "," ); @@ -94,6 +94,45 @@ Hooks.once('init', () => { "career_careergroup": (value) => { var compendium = game.packs.find(p => p.collection === 'wfrp4e.careers'); return compendium.i18nName( value ); + }, + // Auto-translate duration + "spells_duration_range_target_damage": (value) => { + --console.log("Spell duration/range/damage/target :", value); + if ( value == "" ) return ""; // Hop ! + if ( value == "Touch" ) return "Contact"; // Hop ! + if ( value == "You" ) return "Vous"; // Hop ! + if ( value == "Instant" ) return "Instantané"; // Hop ! + var translw = value; + var re = /(.*) Bonus (\w*)/i; + var res = re.exec( value ); + var unit = ""; + if ( res ) { // Test " Bonus " pattern + if ( res[1] ) { // We have char name, then convert it + translw = "Bonus de " + game.i18n.localize( res[1].trim() ); + } + unit = res[2]; + } else { + re = /(\d+) (\w+)/i; + res = re.exec( value ); + if (res) { // Test : " " pattern + translw = res[1]; + unit = res[2]; + } else { // Test + re = /(\w+) (\w+)/i; + res = re.exec( value ); + if (res) { // Test : " " pattern + translw = game.i18n.localize( res[1].trim() ); + unit = res[2]; + } + } + } + if ( unit == "hour") unit = "heure"; + if ( unit == "hours") unit = "heures"; + if ( unit == "days") unit = "jours"; + if ( unit == "yard") unit = "mètre"; + if ( unit == "yards") unit = "mètres"; + translw += " " + unit; + return translw; } }); } diff --git a/compendium/wfrp4e.skills.json b/compendium/wfrp4e.skills.json index b90edc2..be0c760 100644 --- a/compendium/wfrp4e.skills.json +++ b/compendium/wfrp4e.skills.json @@ -757,4 +757,4 @@ "description": "

Beaucoup de gens au Reikland embrassent une profession ; même les aventuriers ont souvent une Carrière plus fiable ou plus respectable sur laquelle compter entre deux épisodes palpitants. La Compétence Métier représente votre capacité à créer quelque chose ou à fournir un service, ainsi que votre connaissance du savoir essentiel entourant votre profession.

\n

 

\n

Posséder la Compétence est suffisant pour effectuer automatiquement les tâches associées à votre profession, en partant du principe que vous possédez les ressources et des outils adaptés. Vous avez besoin d'effectuer un Test de Métier uniquement si vous cherchez à créer quelque chose rapidement, que les conditions sont défavorables ou que vous cherchez à inventer ou créer un objet de grande qualité.

\n

 

\n

Les Tests de Métier de ce type sont souvent des Tests étendus, dont le DR et le temps nécessaires dépendent de la portée ou de l'ampleur de ce qui est produit ; un repas rapide avec Métier (Cuisinier) pour impressionner un seigneur local prendra bien moins de temps que la construction d'un navire de guerre avec Métier (Charpentier de marine).

\n

 

\n

Vous pouvez aussi effectuer un Test de Métier comme une Compétence Savoir pour déterminer une information importante concernant la profession en question. Dans de telles circonstances, le MJ peut préférer utiliser l'Int plutôt que la Dex comme Caractéristique de base, bien que cela soit souvent ignoré pour simplifer.

\n

 

\n

Bien que beaucoup de Compétences Métier aient peu d'utilité en combat, il y a autant de Compétences Métier que de professions, et certaines peuvent être utilisées en fonction des circonstances. Par exemple, réussir un Test de Métier (Apothicaire) peut être utile si vous combattez dans une échoppe d'Apothicaire, car vous identifiez des substances âcres à jeter sur vos ennemis.

\n

 

\n

La Compétence Métier est aussi utilisée pour effectuer une Activité Artisanat (voir page 196).

" } ] -} \ No newline at end of file +} diff --git a/compendium/wfrp4e.spells.json b/compendium/wfrp4e.spells.json index 0f8c6bf..a4e08b3 100644 --- a/compendium/wfrp4e.spells.json +++ b/compendium/wfrp4e.spells.json @@ -1,6 +1,24 @@ { - "label": "Spells", - "entries": [ + "label": "Sorts", + "mapping": { + "sduration": { + "path": "data.duration.value", + "converter": "spells_duration_range_target_damage" + }, + "srange": { + "path": "data.range.value", + "converter": "spells_duration_range_target_damage" + }, + "starget": { + "path": "data.target.value", + "converter": "spells_duration_range_target_damage" + }, + "sdamage": { + "path": "data.damage.value", + "converter": "spells_duration_range_target_damage" + } + }, + "entries": [ { "id": "Acquiescence", "name": "Consentement", diff --git a/fr.json b/fr.json index c9498fe..9f46292 100644 --- a/fr.json +++ b/fr.json @@ -651,6 +651,26 @@ "Engineering": "Ingénierie", "Entangling": "Entraves", "Sling": "Fronde", + + "Petty": "Mineure", + "Beasts": "Bêtes", + "Death": "Mort", + "Fire": "Feu", + "Heavens": "Cieux", + "Metal": "Métal", + "Life": "Vie", + "Light": "Lumière", + "Shadow": "Ombres", + "Hedgecraft": "Sauvage", + "Witchcraft": "Sorcellerie", + "Daemonology": "Démonologie", + "Necromancy": "Nécromancie", + "Nurgle": "Nurgle", + "Slaanesh": "Slaanesh", + "Tzeentch": "Tzeentch", + "Cast Skill": "Compétence d'incantation", + "Language" : "Langue", + "Magick" : "Magick", "AP": "PA", "yards": "mètres", @@ -736,7 +756,7 @@ "TIER.Brass" : "Bronze", "NAME.Pray" : "Prière", - "NAME.Language" : "Language", + "NAME.Language" : "Langue", "SPEC.Magick" : "Magick", "NAME.Channelling" : "Focalisation", "NAME.Melee" : "Corps à Corps", @@ -844,7 +864,8 @@ "ITEM.NoSpec" : "Pas de spécialisation", "Instant" : "Immédiat", - + "Casting Number": "Niveau d'Incantation", + "ClassTrappings.Academics": "Vêtements, Dague, Bourse, Besace contenant un nécessaire d'écriture et 1d10 feuilles de parchemin", "ClassTrappings.Burghers": "Cape, Vêtements, Dague, Chapeau, Bourse, Besace contenant 1 repas", "ClassTrappings.Courtiers": "Vêtements de qualité, Dague, Bourse contenant une pince à épiler, Cures-oreilles et un peigne", @@ -853,8 +874,9 @@ "ClassTrappings.Riverfolk": "Cape, Vêtements, Dague, Bourse, Besace contenant 1 flasque d'alcool", "ClassTrappings.Rogues": "Vêtements, Dague, Bourse, Besace contenant 2 bougies, 1d10 allumettes et une capuche ou un masque", "ClassTrappings.Warriors": "Vêtements, Arme à 1 main, Dague, Bourse", - + "NAME.Stealth" : "Discrétion", "AP" : "PA", - "Scatter" : "Dispersion" + "Scatter" : "Dispersion" + }