Auto-translat careers/skills.comp

This commit is contained in:
sladecraven 2021-08-24 21:43:47 +02:00
parent d40f768909
commit d9bfa7efc4
8 changed files with 490 additions and 348 deletions

View File

@ -110,7 +110,7 @@ const __create_translation_tables = async (compmod) => {
* */
const __auto_patch_translation_journal_compendium = async (compmod) => {
if (game.user.isGM) {
/*let compData = game.packs.get( "WH4-fr-translation.tables-des-traductions" );
let compData = game.packs.get( "WH4-fr-translation.tables-des-traductions" );
compData.locked = false;
let translEntries = await compData.getContent();
for (let entryData of translEntries ) {
@ -118,7 +118,7 @@ const __auto_patch_translation_journal_compendium = async (compmod) => {
mydata.content = mydata.content.replace(/wfrp4e-content/g, compmod );
entryData.update( mydata );
}
compData.locked = true;*/
compData.locked = true;
}
}
@ -165,29 +165,6 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => {
patch_trade_gazeteer()
}
if ( name == "wfrp4e-rnhd" && module.active && game.wfrp4e.tables.career) {
game.wfrp4e.tables.career.name = "Carrières aléatoires";
/*FilePicker.browse("data", "modules/WH4-fr-translation/tables/").then(resp => {
for (var file of resp.files) {
if ( file.match("career_gnome.json") ) {
fetch(file).then(r=>r.json()).then(records => {
let mycareer = records;
game.wfrp4e.tables.career.columns = mycareer.columns;
for (let k=0; k<game.wfrp4e.tables.career.rows.length; k++) {
game.wfrp4e.tables.career.rows[k].range = mycareer.rows[k].range;
game.wfrp4e.tables.career.rows[k].name = mycareer.rows[k].name; // Patch !!!
}
});
}
}
});*/
WH4FRPatchConfig.perform_rnhd_patch();
if (game.user.isGM && chatFlag)
ChatMessage.create( { title: "Module RNHD patché", content: "<strong>Le module RHND a été detecté et automatiquement patché.</strong>", whisper: ChatMessage.getWhisperRecipients("GM") } );
}
if ( name == 'ogre-kingdom-wfrp4e' && module.active) {
WH4FRPatchConfig.perform_ogrekingdom_patch();
if (game.user.isGM && chatFlag)
@ -202,9 +179,10 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => {
}
});
if (game.user.isGM && patchFinished)
if (game.user.isGM && patchFinished) {
ChatMessage.create( { title: "Patch fini !", content: "Les modules WFRP4E ont été patchés <strong>avec succès</strong>. Vous pouvez y aller et que <strong>Shallya vous garde !</strong>", whisper: ChatMessage.getWhisperRecipients("GM") } );
}
}
/************************************************************************************/
const convertColumnToMulti = (table) => {
@ -287,6 +265,7 @@ const __add_actors_translation = ( ) => {
}
}
/************************************************************************************/
/* Hook for specific command */
Hooks.on("chatMessage", (html, content, msg) => {
@ -309,6 +288,7 @@ Hooks.once('ready', () => {
setTimeout( __check_fix_wrong_modules, 20000, false, true);
setTimeout( __add_actors_translation, 21000, false, true);
/*
let compmod = "wfrp4e";
// Check various settings in the installation
game.modules.forEach((module, name) => {
@ -321,6 +301,5 @@ Hooks.once('ready', () => {
Auto-create translation journal tables
__create_translation_tables(compmod);
*/
//__create_translation_tables(compmod);
} );

View File

@ -440,6 +440,8 @@
"ErrorSpeciesTalents": "Impossible d'ajouer le Talents pour les races",
"Roll Characteristic": "Test de Caractéristique",
"Infinite": "Infini",
"any one": "Au choix",
"Sing": "Chant",
"ENTITY.Actor": "Acteur",

View File

@ -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.2",
"version": "4.1.3",
"minimumCoreVersion" : "0.8.0",
"compatibleCoreVersion": "0.8.8",
"author": "LeRatierBretonnien",

View File

@ -1,6 +1,112 @@
export class WH4FRPatchConfig {
/************************************************************************************/
static translateSkillList( skillList) {
let newList = [];
for( let compName of skillList) {
let special = "";
let newName = compName;
if ( compName.includes("(") && compName.includes(")") ) { // Then process specific skills name with (xxxx) inside
var re = /(.*) +\((.*)\)/i;
var res = re.exec( compName );
compName = res[1].trim(); // Get the root skill name
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword
}
var compNameFR = game.babele.translate( 'wfrp4e-core.skills', { name: compName }, true );
//console.log(">>>>> Skill ?", compName, special, compNameFR);
if (compNameFR.name != compName) { // Translation OK
newName = compNameFR.name + special;
}
newList.push(newName);
}
return newList;
}
/************************************************************************************/
static translateTalentList( talentList) {
let newList = [];
for( let talentLine of talentList) {
let special = "";
let newName = talentLine;
if ( isNaN(talentLine) ) {
let subList = talentLine.split(',');
let newSubList = [];
for (let talentName of subList ) {
talentName = talentName.trim();
let newName2 = talentName;
if ( talentName.includes("(") && talentName.includes(")") ) { // Then process specific skills name with (xxxx) inside
var re = /(.*) +\((.*)\)/i;
var res = re.exec( talentName );
talentName = res[1].trim(); // Get the root skill name
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword
}
var talentNameFR = game.babele.translate( 'wfrp4e-core.talents', { name: talentName }, true );
//console.log(">>>>> Talent ?", talentName, special, talentNameFR);
if (talentNameFR.name != talentName) { // Translation OK
newName2 = talentNameFR.name + special;
}
newSubList.push(newName2);
}
newName = newSubList.join(', ');
}
newList.push(newName);
}
return newList;
}
/************************************************************************************/
static patch_subspecies( ) {
for ( let speciesName in game.wfrp4e.config.subspecies) {
let subspeciesList = game.wfrp4e.config.subspecies[speciesName];
for ( let subspeciesName in subspeciesList) {
let subspecies = subspeciesList[subspeciesName];
//console.log("Subpecies translate....", subspecies);
if ( subspecies.skills) {
subspecies.skills = this.translateSkillList(subspecies.skills);
}
if ( subspecies.talents) {
subspecies.talents = this.translateTalentList(subspecies.talents);
}
}
}
}
/************************************************************************************/
static patch_species_skills( ) {
for (let speciesName in game.wfrp4e.config.speciesSkills) {
let speciesComp = game.wfrp4e.config.speciesSkills[speciesName];
game.wfrp4e.config.speciesSkills[speciesName] = this.translateSkillList( speciesComp )
}
}
/************************************************************************************/
static patch_species_talents( ) {
for (let speciesName in game.wfrp4e.config.speciesTalents) {
let speciesTalents = game.wfrp4e.config.speciesTalents[speciesName];
game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList( speciesTalents);
}
}
/************************************************************************************/
static patch_career() {
for( let row of game.wfrp4e.tables.career.rows) {
for ( let key in row) {
if (key != "range") {
if ( row[key].name == 'Slayer' ) {
row[key].name = "Tueur Nains";
} else if ( row[key].name == 'Duelist' ) {
row[key].name = "Duelliste";
//console.log(">>>>> Career ?", key, row[key].name, career_fr.name );
} else {
var career_fr = game.babele.translate( 'wfrp4e-core.careers', {name: row[key].name}, true );
row[key].name = career_fr.name;
}
}
}
}
}
/************************************************************************************/
static perform_patch() {
@ -21,301 +127,18 @@ export class WH4FRPatchConfig {
"doigts de fée": "dex",
"guerrier né": "ws"
}
game.wfrp4e.config.speciesSkills["human"] = [
"Soins aux animaux",
"Charme",
"Calme",
"Evaluation",
"Ragot",
"Marchandage",
"Langue (Bretonnien)",
"Langue (Wastelander)",
"Commandement",
"Savoir (Reikland)",
"Corps à corps (Base)",
"Projectiles (Arc)"
];
game.wfrp4e.config.speciesSkills["dwarf"] = [
"Résistance à l'alcool",
"Calme",
"Résistance",
"Divertissement (Raconter)",
"Evaluation",
"Intimidation",
"Langue (Khazalid)",
"Savoir (Nains)",
"Savoir (Geologie)",
"Savoir (Metallurgie)",
"Corps à corps (Base)",
"Métier (Au choix)"
];
game.wfrp4e.config.speciesSkills["halfling"] = [
"Charme",
"Résistance à l'alcool",
"Esquive",
"Pari",
"Marchandage",
"Intuition",
"Langue (Mootland)",
"Savoir (Reikland)",
"Perception",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)"
];
game.wfrp4e.config.speciesSkills["helf"] = [
"Calme",
"Divertissement (Chant)",
"Evaluation",
"Langue (Eltharin)",
"Commandement",
"Corps à corps (Base)",
"Orientation",
"Perception",
"Musicien (Au choix)",
"Projectiles (Arc)",
"Voile",
"Natation"
];
game.wfrp4e.config.speciesSkills["welf"] = [
"Athlétisme",
"Escalade",
"Résistance",
"Divertissement (Chant)",
"Intimidation",
"Langue (Eltharin)",
"Corps à corps (Base)",
"Survie en extérieur",
"Perception",
"Projectiles (Arc)",
"Discrétion (Rural)",
"Pistage"
];
game.wfrp4e.config.speciesTalents["human"] = [
"Destinée",
"Affable, Perspicace",
3
]
game.wfrp4e.config.speciesTalents["dwarf"] = [
"Résistance à la Magie",
"Vision Nocturne",
"Lire/Ecrire, Impitoyable",
"Déterminé, Obstiné",
"Costaud",
0
]
game.wfrp4e.config.speciesTalents["halfling"] = [
"Sens Aiguisé (Gout)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
2
];
game.wfrp4e.config.speciesTalents["helf"] = [
"Sens Aiguisé (Vue)",
"Imperturbable, Perspicace",
"Vision Nocturne",
"Seconde Vue, Sixième Sens",
"Lire/Ecrire",
0
]
game.wfrp4e.config.speciesTalents["welf"] = [
"Sens Aiguisé (Vue)",
"Dur à cuire, Seconde Vue",
"Vision Nocturne",
"Nomade",
"Lire/Ecrire, Très Résistant",
0
]
game.wfrp4e.config.species["human"] = "Humain";
game.wfrp4e.config.species["dwarf"] = "Nain";
game.wfrp4e.config.species["halfling"] = "Halfling";
game.wfrp4e.config.species["helf"] = "Haut Elfe";
game.wfrp4e.config.species["welf"] = "Elfe Sylvain";
game.wfrp4e.config.subspecies["human"]["reiklander"] = {
name: "Reiklander",
skills: [
"Soins aux animaux",
"Charme",
"Calme",
"Evaluation",
"Ragot",
"Marchandage",
"Langue (Bretonnien)",
"Langue (Wastelander)",
"Commandement",
"Savoir (Reikland)",
"Corps à corps (Base)",
"Projectiles (Arc)"
],
talents: [
"Destinée",
"Affable, Perspicace",
3
]
}
if (game.wfrp4e.config.subspecies["welf"]["harioth"]) { // Archives Empire
game.wfrp4e.config.subspecies["welf"]["harioth"] = {
name: "Harioth",
talents: [
"Sens Aiguisé (Vue)",
"Dur à cuire, Seconde Vue",
"Vision Nocturne",
"Lire/Ecrire, Très Résistant",
"Nomade",
"Youngblood",
0
]
}
game.wfrp4e.config.subspecies["halfling"]["ashfield"] = {
name: "Ashfield",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Calme",
"Intuition",
"Langue (Mootish)",
"Projectiles (Au choix)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Sens Aiguisé (Vue), Etiquette (Soldats)",
1
]
}
game.wfrp4e.config.subspecies.halfling["brambledown"] = {
name: "Brambledown",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Langue (Mootish) ",
"Orientation",
"Survie en extérieur ",
"Natation"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Sociable, Voyageur aguerri",
1
]
}
game.wfrp4e.config.subspecies.halfling["brandysnap"] = {
name: "Brandysnap",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Soins aux animaux",
"Pari",
"Langue (Mootish)",
"Métier (Herboriste)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Maître Artisan (Fermier), Costaud",
1
]
}
game.wfrp4e.config.subspecies.halfling["hayfoot"] = {
name: "Hayfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Gamble",
"Pari",
"Evaluation",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Négociateur, Etiquette (Guildes)",
1
]
}
game.wfrp4e.config.subspecies.halfling["hollyfoot"] = {
name: "Hollyfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Subornation",
"Marchandage",
"Ragot",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Maître Artisan (Au choix), Doigts de fée",
1
]
}
game.wfrp4e.config.subspecies.halfling["hayfoot—hollyfoot"] = {
name: "Hayfoot—Hollyfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Subornation",
"Marchandage",
"Ragot",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Ergoteur, Numismate",
1
]
}
}
this.patch_species_skills();
this.patch_species_talents();
this.patch_subspecies();
this.patch_career();
game.wfrp4e.config.conditionScripts = {
"ablaze": async function (actor) {
@ -1852,32 +1675,4 @@ export class WH4FRPatchConfig {
]
}
/************************************************************************************/
static perform_rnhd_patch() {
game.wfrp4e.config.species['gnome'] = 'Gnome';
game.wfrp4e.config.speciesSkills["gnome"] = [
"Focalisation (Ulgu)",
"Charme",
"Résistance à l'alcool",
"Esquive",
"Divertissement (Au choix)",
"Ragot",
"Marchandage",
"Langue (Ghassally)",
"Langue (Magick)",
"Langue (Wastelander)",
"Survie en extérieur",
"Discrétion (Au choix)"
];
game.wfrp4e.config.speciesTalents["gnome"] = [
"Insignifiant, Imprégné avec Uglu",
"Chanceux, Imitation",
"Vision Nocturne",
"Pêcheur, Lire/Ecrire",
"Seconde Vue, Sixième Sens",
"Petit",
0
];
}
}

366
modules/discarded.txt Normal file
View File

@ -0,0 +1,366 @@
/*
game.wfrp4e.config.speciesSkills["human"] = [
"Soins aux animaux",
"Charme",
"Calme",
"Evaluation",
"Ragot",
"Marchandage",
"Langue (Bretonnien)",
"Langue (Wastelander)",
"Commandement",
"Savoir (Reikland)",
"Corps à corps (Base)",
"Projectiles (Arc)"
];
game.wfrp4e.config.speciesSkills["dwarf"] = [
"Résistance à l'alcool",
"Calme",
"Résistance",
"Divertissement (Raconter)",
"Evaluation",
"Intimidation",
"Langue (Khazalid)",
"Savoir (Nains)",
"Savoir (Geologie)",
"Savoir (Metallurgie)",
"Corps à corps (Base)",
"Métier (Au choix)"
];
game.wfrp4e.config.speciesSkills["halfling"] = [
"Charme",
"Résistance à l'alcool",
"Esquive",
"Pari",
"Marchandage",
"Intuition",
"Langue (Mootland)",
"Savoir (Reikland)",
"Perception",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)"
];
game.wfrp4e.config.speciesSkills["helf"] = [
"Calme",
"Divertissement (Chant)",
"Evaluation",
"Langue (Eltharin)",
"Commandement",
"Corps à corps (Base)",
"Orientation",
"Perception",
"Musicien (Au choix)",
"Projectiles (Arc)",
"Voile",
"Natation"
];
game.wfrp4e.config.speciesSkills["welf"] = [
"Athlétisme",
"Escalade",
"Résistance",
"Divertissement (Chant)",
"Intimidation",
"Langue (Eltharin)",
"Corps à corps (Base)",
"Survie en extérieur",
"Perception",
"Projectiles (Arc)",
"Discrétion (Rural)",
"Pistage"
];*/
game.wfrp4e.config.speciesTalents["human"] = [
"Destinée",
"Affable, Perspicace",
3
]
game.wfrp4e.config.speciesTalents["dwarf"] = [
"Résistance à la Magie",
"Vision Nocturne",
"Lire/Ecrire, Impitoyable",
"Déterminé, Obstiné",
"Costaud",
0
]
game.wfrp4e.config.speciesTalents["halfling"] = [
"Sens Aiguisé (Gout)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
2
];
game.wfrp4e.config.speciesTalents["helf"] = [
"Sens Aiguisé (Vue)",
"Imperturbable, Perspicace",
"Vision Nocturne",
"Seconde Vue, Sixième Sens",
"Lire/Ecrire",
0
]
game.wfrp4e.config.speciesTalents["welf"] = [
"Sens Aiguisé (Vue)",
"Dur à cuire, Seconde Vue",
"Vision Nocturne",
"Nomade",
"Lire/Ecrire, Très Résistant",
0
]
/************************************************************************************/
static perform_rnhd_patch() {
game.wfrp4e.config.species['gnome'] = 'Gnome';
game.wfrp4e.config.speciesSkills["gnome"] = [
"Focalisation (Ulgu)",
"Charme",
"Résistance à l'alcool",
"Esquive",
"Divertissement (Au choix)",
"Ragot",
"Marchandage",
"Langue (Ghassally)",
"Langue (Magick)",
"Langue (Wastelander)",
"Survie en extérieur",
"Discrétion (Au choix)"
];
game.wfrp4e.config.speciesTalents["gnome"] = [
"Insignifiant, Imprégné avec Uglu",
"Chanceux, Imitation",
"Vision Nocturne",
"Pêcheur, Lire/Ecrire",
"Seconde Vue, Sixième Sens",
"Petit",
0
];
}
}
game.wfrp4e.config.subspecies["human"]["reiklander"] = {
name: "Reiklander",
skills: [
"Soins aux animaux",
"Charme",
"Calme",
"Evaluation",
"Ragot",
"Marchandage",
"Langue (Bretonnien)",
"Langue (Wastelander)",
"Commandement",
"Savoir (Reikland)",
"Corps à corps (Base)",
"Projectiles (Arc)"
],
talents: [
"Destinée",
"Affable, Perspicace",
3
]
}
if (game.wfrp4e.config.subspecies["welf"]["harioth"]) { // Archives Empire
game.wfrp4e.config.subspecies["welf"]["harioth"] = {
name: "Harioth",
talents: [
"Sens Aiguisé (Vue)",
"Dur à cuire, Seconde Vue",
"Vision Nocturne",
"Lire/Ecrire, Très Résistant",
"Nomade",
"Youngblood",
0
]
}
game.wfrp4e.config.subspecies["halfling"]["ashfield"] = {
name: "Ashfield",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Calme",
"Intuition",
"Langue (Mootish)",
"Projectiles (Au choix)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Sens Aiguisé (Vue), Etiquette (Soldats)",
1
]
}
game.wfrp4e.config.subspecies.halfling["brambledown"] = {
name: "Brambledown",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Langue (Mootish) ",
"Orientation",
"Survie en extérieur ",
"Natation"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Sociable, Voyageur aguerri",
1
]
}
game.wfrp4e.config.subspecies.halfling["brandysnap"] = {
name: "Brandysnap",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Soins aux animaux",
"Pari",
"Langue (Mootish)",
"Métier (Herboriste)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Maître Artisan (Fermier), Costaud",
1
]
}
game.wfrp4e.config.subspecies.halfling["hayfoot"] = {
name: "Hayfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Gamble",
"Pari",
"Evaluation",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Négociateur, Etiquette (Guildes)",
1
]
}
game.wfrp4e.config.subspecies.halfling["hollyfoot"] = {
name: "Hollyfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Subornation",
"Marchandage",
"Ragot",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Maître Artisan (Au choix), Doigts de fée",
1
]
}
game.wfrp4e.config.subspecies.halfling["hayfoot—hollyfoot"] = {
name: "Hayfoot—Hollyfoot",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Subornation",
"Marchandage",
"Ragot",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Ergoteur, Numismate",
1
]
}
game.wfrp4e.config.subspecies.halfling["lostpockets"] = {
name: "Lostpockets",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Résistance",
"Pari",
"Ragot",
"Intuition"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Dur à cuire, Brouet",
1
]
}
game.wfrp4e.config.subspecies.halfling["lowhaven"] = {
name: "Lowhaven",
skills: [
"Charme",
"Résistance à l'alcool",
"Marchandage",
"Savoir (Reikland)",
"Escamotage",
"Discrétion (Au choix)",
"Métier (Cuisinier)",
"Subornation",
"Marchandage",
"Intimidation",
"Langue (Mootish)"
],
talents: [
"Sens Aiguisé (Goût)",
"Vision Nocturne",
"Résistant (Chaos)",
"Petit",
"Criminel, Etiquette (Criminels ou Guildes)",
1
]
}