Compare commits

...

9 Commits

Author SHA1 Message Date
fc560ddee7 Align with v9.3.0 2025-10-31 18:05:03 +00:00
47454b30f1 Align with v9.3.0 2025-10-31 18:04:13 +00:00
4ee45273b3 COrrection sur Natation - again 2025-10-13 20:59:50 +02:00
94ca8cb6ea Align to v9.2.X 2025-09-23 16:44:41 +02:00
6af8d03d22 Fix natation/swim 2025-07-25 15:03:04 +02:00
7afcadfb6f Fix natation/swim 2025-07-25 10:51:41 +02:00
5801a5270f Fix translated talents ... 2025-07-20 10:17:55 +02:00
f8908617a1 Fix translated talents ... 2025-07-20 10:17:37 +02:00
4b36c52bb1 Enhance auto-translation 2025-06-04 20:00:36 +02:00
36 changed files with 182 additions and 148 deletions

View File

@@ -5985,6 +5985,11 @@
"id": "Lore (Tilea)", "id": "Lore (Tilea)",
"name": "Savoir (Tilée)" "name": "Savoir (Tilée)"
}, },
{
"description": "<p>Posséder une Compétence Savoir signifie que vous avez officiellement étudié, ou avez appris dune façon ou dune autre, une branche de connaissances avancées. Vous possédez des données approfondies dans une spécialisation et navez donc pas besoin deffectuer de Test pour que le MJ vous donne les éléments dinformation utiles. Si vous recherchez des informations spécifiques moins connues, vous aurez besoin deffectuer un Test de Savoir, modifié selon la nature obscure de linformation, où les DR indiqueront de combien de détails vous vous souvenez.<p>En combat, un Test de Savoir réussi peut éventuellement vous accorder +1 Avantage (avec laccord de votre MJ). Par exemple, Savoir (Géologie) peut vous donner un Avantage si vous combattez dans une caverne, ou Savoir (Ingénierie) peut vous aider si vous combattez un ennemi armé dun appareil mécanique complexe. Vous pouvez continuer à renforcer votre Avantage lors des tours ultérieurs, à condition que les circonstances le permettent (déterminé par le MJ) et que vous ne soyez pas interrompu ; de cette façon, vous pouvez gagner un maximum dAvantages, égal à votre Bonus dIntelligence.</p>",
"id": "Lore (Law)",
"name": "Savoir (Loi)"
},
{ {
"description": "<p>La Compétence Corps à corps représente l'entraînement spécifique que vous avez reçu avec un seul type d'armes de combat rapproché. Chaque Spécialisation de Corps à corps indique un entraînement à une classe d'arme spécifique. Si vous n'avez pas la Spécialisation appropriée pour une arme que vous souhaitez utiliser, référez-vous au <strong>Chapitre 11 : Guide de l'équipement </strong>pour consulter les statistiques de l'arme et savoir quelles pénalités vous subirez. Voir <strong>Chapitre 5 : Règles </strong>pour plus d'informations sur les combats et l'utilisation de la Compétence Corps à corps.<p><strong>Exemples de Spécialisations : </strong>Arme d'hast, Arme à deux mains, Bagarre, Base, Cavalerie, Escrime, Fléau, Parade.</p>", "description": "<p>La Compétence Corps à corps représente l'entraînement spécifique que vous avez reçu avec un seul type d'armes de combat rapproché. Chaque Spécialisation de Corps à corps indique un entraînement à une classe d'arme spécifique. Si vous n'avez pas la Spécialisation appropriée pour une arme que vous souhaitez utiliser, référez-vous au <strong>Chapitre 11 : Guide de l'équipement </strong>pour consulter les statistiques de l'arme et savoir quelles pénalités vous subirez. Voir <strong>Chapitre 5 : Règles </strong>pour plus d'informations sur les combats et l'utilisation de la Compétence Corps à corps.<p><strong>Exemples de Spécialisations : </strong>Arme d'hast, Arme à deux mains, Bagarre, Base, Cavalerie, Escrime, Fléau, Parade.</p>",
"id": "Melee", "id": "Melee",

15
fr.json
View File

@@ -314,6 +314,10 @@
"SHEET.NPCSheetNoTheme":"Fiche de PNJ (sans thème)", "SHEET.NPCSheetNoTheme":"Fiche de PNJ (sans thème)",
"SHEET.VehicleSheet":"Fiche de véhicule", "SHEET.VehicleSheet":"Fiche de véhicule",
"SHEET.VehicleSheetNoTheme":"Fiche de véhicule (sans thème)", "SHEET.VehicleSheetNoTheme":"Fiche de véhicule (sans thème)",
"SHEET.Append":"Ajouter après",
"SHEET.Prepend":"Ajouter avant",
"SHEET.SkillName":"Nom de la compétence",
"SHEET.TalentName":"Nom du Talent",
"SHEETS.Actor.vehicle":"Fiche de Véhicule", "SHEETS.Actor.vehicle":"Fiche de Véhicule",
"SHEETS.Item.ammunition":"Fiche de Munitions", "SHEETS.Item.ammunition":"Fiche de Munitions",
@@ -429,6 +433,7 @@
"ITEM.Roles":"Roles", "ITEM.Roles":"Roles",
"ITEM.VitalRoles":"Roles vitaux", "ITEM.VitalRoles":"Roles vitaux",
"ITEM.LearningXP":"XP d'Apprentissage", "ITEM.LearningXP":"XP d'Apprentissage",
"ITEM.Custom":"Personnalisé",
"TOKEN.MOVEMENT.Status.immobile":"Immobile", "TOKEN.MOVEMENT.Status.immobile":"Immobile",
"TOKEN.MOVEMENT.Status.restricted":"Restreint", "TOKEN.MOVEMENT.Status.restricted":"Restreint",
@@ -645,6 +650,7 @@
"Hide": "Cacher", "Hide": "Cacher",
"Targets": "Cibles", "Targets": "Cibles",
"Melee": "Corps à corps", "Melee": "Corps à corps",
"Swim":" Natation",
"Cost": "Prix", "Cost": "Prix",
"Length": "Longueur", "Length": "Longueur",
"Cargo": "Cargaison", "Cargo": "Cargaison",
@@ -737,7 +743,6 @@
"Stat Block Parser":"Parser de fiches de PNJ", "Stat Block Parser":"Parser de fiches de PNJ",
"Submit":"Soumettre", "Submit":"Soumettre",
"SuccessLevels":"DR", "SuccessLevels":"DR",
"Swim":"Nager",
"TBRed":"BE", "TBRed":"BE",
"TookDamage":"Encaisse {damage} dommages", "TookDamage":"Encaisse {damage} dommages",
"ToughnessDesc":"Endurance", "ToughnessDesc":"Endurance",
@@ -1020,6 +1025,7 @@
"DIALOG.LinkCareerContent":"Relier {new} avec {old}? Les compétences de {old} seront ajoutées à {new}, tout en préservant toutes les spécialisations effectuées avec la carrière précédente.", "DIALOG.LinkCareerContent":"Relier {new} avec {old}? Les compétences de {old} seront ajoutées à {new}, tout en préservant toutes les spécialisations effectuées avec la carrière précédente.",
"DIALOG.ChoosePassenger":"Choisissez un passager", "DIALOG.ChoosePassenger":"Choisissez un passager",
"DIALOG.PostQuantityContent":"Combien de fois cet item peut être récupéré? Laissez vide pour illimité.", "DIALOG.PostQuantityContent":"Combien de fois cet item peut être récupéré? Laissez vide pour illimité.",
"DIALOG.ChooseArmour":"Choisissez une armure à endommager",
"CHAT.CareerChoose" : "Choisissez votre carrière", "CHAT.CareerChoose" : "Choisissez votre carrière",
"CHAT.DamageError" : "Erreur de calcul des dégâts:", "CHAT.DamageError" : "Erreur de calcul des dégâts:",
@@ -1184,6 +1190,8 @@
"CHAT.Vital":"Vital", "CHAT.Vital":"Vital",
"CHAT.DiseaseRollError":"Une erreur s'est produite lors du jet d'incubation ou de durée de la maladie.", "CHAT.DiseaseRollError":"Une erreur s'est produite lors du jet d'incubation ou de durée de la maladie.",
"CHAT.ExpReceivedNoReason":"Vous avez reçu <b>{amount}</b> points d'expérience", "CHAT.ExpReceivedNoReason":"Vous avez reçu <b>{amount}</b> points d'expérience",
"CHAT.CriticalDeflection":"Déviation de Critique",
"CHAT.DamageToArmour":"1 Dommages appliqués à {item} ({type})",
"Error.SpeciesSkills" : "Impossible d'ajouter des compétences pour les races", "Error.SpeciesSkills" : "Impossible d'ajouter des compétences pour les races",
"Error.SpeciesTalents" : "Impossible d'ajouter des talents pour les races", "Error.SpeciesTalents" : "Impossible d'ajouter des talents pour les races",
@@ -2696,6 +2704,10 @@
"major":"Majeur", "major":"Majeur",
"minor":"Mineur", "minor":"Mineur",
"moderate":"Modéré", "moderate":"Modéré",
"DurationPlaceholder":"Texte concernant a durée",
"ErrorArmourDamagePermission":"Vous n'avez pas les droits pour endommager l'armure de cet acteur.",
"IncubationPlaceholder":"Texte concernant l'incubation",
"Required Trappings":"Equipement requis",
"WH":{ "WH":{
"TransferType":{ "TransferType":{
@@ -2716,5 +2728,6 @@
"SHEET.ExperienceLog":"Journal d'Expérince", "SHEET.ExperienceLog":"Journal d'Expérince",
"SHEET.Attacker":"Attaquant", "SHEET.Attacker":"Attaquant",
"SHEET.Randomize":"Aléatoire", "SHEET.Randomize":"Aléatoire",
"SHEET.RequiredTrappingsError":"Impossible de lancer les revenus sans avoir tous les équipements requis dans cette carrière !",
"Sheet.RollIncome":"Revenu" "Sheet.RollIncome":"Revenu"
} }

View File

@@ -8,7 +8,7 @@
} }
], ],
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr", "url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr",
"version": "9.1.2", "version": "9.3.0",
"esmodules": [ "esmodules": [
"modules/babele-register.js", "modules/babele-register.js",
"modules/addon-register.js", "modules/addon-register.js",
@@ -119,7 +119,7 @@
} }
], ],
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-1-2.zip", "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-3-0.zip",
"id": "wh4-fr-translation", "id": "wh4-fr-translation",
"compatibility": { "compatibility": {
"minimum": "13", "minimum": "13",

View File

@@ -421,7 +421,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("trait") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("trait")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
if (trait_fr?.name ) { if (trait_fr?.name && trait_fr?.name != name_en) {
trait_fr.name = trait_fr.name || trait_en.name trait_fr.name = trait_fr.name || trait_en.name
trait_en.name = nbt + trait_fr.name + special; trait_en.name = nbt + trait_fr.name + special;
trait_en.system.description.value = trait_fr.system.description.value; trait_en.system.description.value = trait_fr.system.description.value;
@@ -442,7 +442,8 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("skill") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("skill")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
if (trait_fr?.name) { //console.log(">>>>> Skill FR ?", trait_fr, name_en, special)
if (trait_fr?.name && trait_fr?.name != name_en) {
trait_fr.name = trait_fr.name || name_en trait_fr.name = trait_fr.name || name_en
trait_en.name = trait_fr.name + special; trait_en.name = trait_fr.name + special;
trait_en.system.description.value = trait_fr.system.description.value; trait_en.system.description.value = trait_fr.system.description.value;
@@ -453,7 +454,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("prayer") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("prayer")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
if (trait_fr?.name) { if (trait_fr?.name && trait_fr?.name != name_en) {
WFRP4FrTranslation.parseSpellContent(trait_en) WFRP4FrTranslation.parseSpellContent(trait_en)
trait_fr.name = trait_fr.name || name_en trait_fr.name = trait_fr.name || name_en
trait_en.name = trait_fr.name + special; trait_en.name = trait_fr.name + special;
@@ -467,7 +468,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("spell") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("spell")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
if (trait_fr?.name) { if (trait_fr?.name && trait_fr?.name != name_en) {
WFRP4FrTranslation.parseSpellContent(trait_en) WFRP4FrTranslation.parseSpellContent(trait_en)
trait_fr.name = trait_fr.name || name_en trait_fr.name = trait_fr.name || name_en
trait_en.name = trait_fr.name + special; trait_en.name = trait_fr.name + special;
@@ -494,7 +495,7 @@ Hooks.once('init', () => {
} }
trait_en.name = name_en // Reset the name to the original one trait_en.name = name_en // Reset the name to the original one
let trait_fr = game.babele.translate(compData.metadata.id, trait_en, true) let trait_fr = game.babele.translate(compData.metadata.id, trait_en, true)
if (trait_fr?.name) { if (trait_fr?.name && trait_fr?.name != name_en) {
trait_fr.name = trait_fr.name || name_en // Security since babele v10 trait_fr.name = trait_fr.name || name_en // Security since babele v10
//console.log(">>>>> Talent ?", trait_fr, name_en, special, trait_fr.name); //console.log(">>>>> Talent ?", trait_fr, name_en, special, trait_fr.name);
if (trait_fr.name && (trait_fr.name == "Sprinter" || trait_fr.name != name_en)) { // Talent translated! if (trait_fr.name && (trait_fr.name == "Sprinter" || trait_fr.name != name_en)) { // Talent translated!
@@ -513,7 +514,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("career") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("career")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let career_fr = game.babele.translate(compData.metadata.id, trait_en, true); let career_fr = game.babele.translate(compData.metadata.id, trait_en, true);
if (career_fr?.name) { if (career_fr?.name && career_fr?.name != name_en) {
trait_en.name = career_fr.name || trait_en.name trait_en.name = career_fr.name || trait_en.name
// DEBG: console.log(">>>>> Career ?", career_fr.name ); // DEBG: console.log(">>>>> Career ?", career_fr.name );
trait_en.system = foundry.utils.duplicate(career_fr.system); trait_en.system = foundry.utils.duplicate(career_fr.system);
@@ -524,7 +525,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("vehicleRole") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("vehicleRole")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let role_fr = game.babele.translate(compData.metadata.id, trait_en, true); let role_fr = game.babele.translate(compData.metadata.id, trait_en, true);
if (role_fr?.name) { if (role_fr?.name && role_fr?.name != name_en) {
trait_en.name = role_fr.name || trait_en.name trait_en.name = role_fr.name || trait_en.name
// DEBG: console.log(">>>>> Role ?", role_fr.name ); // DEBG: console.log(">>>>> Role ?", role_fr.name );
trait_en.system = foundry.utils.duplicate(role_fr.system); trait_en.system = foundry.utils.duplicate(role_fr.system);
@@ -535,7 +536,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag(["trapping"], ["weapon", "armour", "container", "money"]) let validCompendiums = game.wfrp4e.tags.getPacksWithTag(["trapping"], ["weapon", "armour", "container", "money"])
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trapping_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true); let trapping_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true);
if (trapping_fr?.name) { if (trapping_fr?.name && trapping_fr?.name != name_en) {
trait_en.name = trapping_fr.name || trait_en.name trait_en.name = trapping_fr.name || trait_en.name
if (trapping_fr.system?.description?.value) { if (trapping_fr.system?.description?.value) {
trait_en.system.description.value = trapping_fr.system.description.value trait_en.system.description.value = trapping_fr.system.description.value

View File

@@ -2,51 +2,66 @@
export class WH4FRPatchConfig { export class WH4FRPatchConfig {
/************************************************************************************/ /************************************************************************************/
static translateSkillList( skillList) { static translateSkillList(skillList) {
let compendiumName = 'wfrp4e-core.items' let compendiumName = 'wfrp4e-core.items'
let newList = []; let newList = [];
for( let compName of skillList) { for (let compName of skillList) {
if (!compName) {
newList.push(compName);
continue;
}
if (!isNaN(compName)) { // If numeric, keep as is (for skill levels)
newList.push(compName);
continue;
}
// Trim compName
compName = compName.trim();
let special = ""; let special = "";
let newName = compName; let newName = compName;
if ( compName.includes("(") && compName.includes(")") ) { // Then process specific skills name with (xxxx) inside let baseName = compName
let re = /(.*) +\((.*)\)/i; if (compName.includes("(") && compName.includes(")")) { // Then process specific skills name with (xxxx) inside
let res = re.exec( compName ); let re = /(.*) +\((.*)\)/i;
let res = re.exec(compName);
compName = res[1].trim(); // Get the root skill name compName = res[1].trim(); // Get the root skill name
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword
} }
let compNameFR = game.babele.translate( compendiumName, { name: compName }, true ); let compNameFR = game.babele.translate(compendiumName, { name: compName }, true);
if (compNameFR.name != compName) { // Translation OK if (compNameFR.name != compName) { // Translation OK
newName = compNameFR.name + special; newName = compNameFR.name + special;
} }
// DEBUG console.log("Translating skill ", compName, baseName, " to ", newName, special);
if (!newName || newName == "" || newName === undefined || newName === "undefined") { // If no translation, keep the original name
newName = baseName; // If no translation, keep the original name
}
newList.push(newName); newList.push(newName);
} }
return newList; return newList;
} }
/************************************************************************************/ /************************************************************************************/
static translateTalentList( talentList) { static translateTalentList(talentList) {
let compendiumName = 'wfrp4e-core.items' let compendiumName = 'wfrp4e-core.items'
let newList = []; let newList = [];
for( let talentLine of talentList) { for (let talentLine of talentList) {
let special = ""; let special = "";
let newName = talentLine; let newName = talentLine;
if ( isNaN(talentLine) ) { if (isNaN(talentLine)) {
let subList = talentLine.split(','); let subList = talentLine.split(',');
let newSubList = []; let newSubList = [];
for (let talentName of subList ) { for (let talentName of subList) {
talentName = talentName.trim(); talentName = talentName.trim();
let newName2 = talentName; let newName2 = talentName;
if ( talentName.includes("(") && talentName.includes(")") ) { // Then process specific skills name with (xxxx) inside if (talentName.includes("(") && talentName.includes(")")) { // Then process specific skills name with (xxxx) inside
let re = /(.*) +\((.*)\)/i; let re = /(.*) +\((.*)\)/i;
let res = re.exec( talentName ); let res = re.exec(talentName);
talentName = res[1].trim(); // Get the root skill name talentName = res[1].trim(); // Get the root skill name
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword
} }
let talentNameFR = game.babele.translate( compendiumName, { name: talentName }, true ); let talentNameFR = game.babele.translate(compendiumName, { name: talentName }, true);
if (talentNameFR.name != talentName) { // Translation OK if (talentNameFR.name != talentName) { // Translation OK
newName2 = talentNameFR.name + special; newName2 = talentNameFR.name + special;
} }
@@ -60,15 +75,15 @@ export class WH4FRPatchConfig {
} }
/************************************************************************************/ /************************************************************************************/
static patch_subspecies( ) { static patch_subspecies() {
for ( let speciesName in game.wfrp4e.config.subspecies) { for (let speciesName in game.wfrp4e.config.subspecies) {
let subspeciesList = game.wfrp4e.config.subspecies[speciesName]; let subspeciesList = game.wfrp4e.config.subspecies[speciesName];
for ( let subspeciesName in subspeciesList) { for (let subspeciesName in subspeciesList) {
let subspecies = subspeciesList[subspeciesName]; let subspecies = subspeciesList[subspeciesName];
if ( subspecies.skills) { if (subspecies.skills) {
subspecies.skills = this.translateSkillList(subspecies.skills); subspecies.skills = this.translateSkillList(subspecies.skills);
} }
if ( subspecies.talents) { if (subspecies.talents) {
subspecies.talents = this.translateTalentList(subspecies.talents); subspecies.talents = this.translateTalentList(subspecies.talents);
} }
} }
@@ -76,20 +91,20 @@ export class WH4FRPatchConfig {
} }
/************************************************************************************/ /************************************************************************************/
static patch_species_skills( ) { static patch_species_skills() {
console.log("Patching species skills...."); console.log("Patching species skills....");
for (let speciesName in game.wfrp4e.config.speciesSkills) { for (let speciesName in game.wfrp4e.config.speciesSkills) {
let speciesComp = game.wfrp4e.config.speciesSkills[speciesName]; let speciesComp = game.wfrp4e.config.speciesSkills[speciesName];
console.log("SpeciesName", speciesName, speciesComp); console.log("SpeciesName", speciesName, speciesComp);
game.wfrp4e.config.speciesSkills[speciesName] = this.translateSkillList( speciesComp ) game.wfrp4e.config.speciesSkills[speciesName] = this.translateSkillList(speciesComp)
} }
} }
/************************************************************************************/ /************************************************************************************/
static patch_species_talents( ) { static patch_species_talents() {
for (let speciesName in game.wfrp4e.config.speciesTalents) { for (let speciesName in game.wfrp4e.config.speciesTalents) {
let speciesTalents = game.wfrp4e.config.speciesTalents[speciesName]; let speciesTalents = game.wfrp4e.config.speciesTalents[speciesName];
game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList( speciesTalents); game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList(speciesTalents);
} }
} }
@@ -97,16 +112,16 @@ export class WH4FRPatchConfig {
static patch_career() { static patch_career() {
let compendiumName = 'wfrp4e-core.items' let compendiumName = 'wfrp4e-core.items'
if ( game.wfrp4e.tables.career) { if (game.wfrp4e.tables.career) {
for( let row of game.wfrp4e.tables.career.rows) { for (let row of game.wfrp4e.tables.career.rows) {
for ( let key in row) { for (let key in row) {
if (key != "range") { if (key != "range") {
if ( row[key].name == 'Slayer' ) { if (row[key].name == 'Slayer') {
row[key].name = "Tueur Nains"; row[key].name = "Tueur Nains";
} else if ( row[key].name == 'Duelist' ) { } else if (row[key].name == 'Duelist') {
row[key].name = "Duelliste"; row[key].name = "Duelliste";
} else { } else {
let career_fr = game.babele.translate( compendiumName, {name: row[key].name}, true ); let career_fr = game.babele.translate(compendiumName, { name: row[key].name }, true);
row[key].name = career_fr.name; row[key].name = career_fr.name;
} }
} }
@@ -123,7 +138,7 @@ export class WH4FRPatchConfig {
for (let result of newResults) { for (let result of newResults) {
result.name = game.i18n.localize(result.name); result.name = game.i18n.localize(result.name);
} }
speciesTable.update({results: newResults } ) speciesTable.update({ results: newResults })
console.log("Species table patched to use 'Humain' instead of 'Human'", speciesTable); console.log("Species table patched to use 'Humain' instead of 'Human'", speciesTable);
} }
@@ -139,7 +154,7 @@ export class WH4FRPatchConfig {
} }
// Detect and patch as necessary // Detect and patch as necessary
if (game.wfrp4e.config?.talentBonuses ) { if (game.wfrp4e.config?.talentBonuses) {
this.fixSpeciesTable() // Force 'name' field replacement this.fixSpeciesTable() // Force 'name' field replacement
@@ -181,22 +196,22 @@ export class WH4FRPatchConfig {
if (game.wfrp4e.config.characteristicsBonus) { if (game.wfrp4e.config.characteristicsBonus) {
game.wfrp4e.config.characteristicsBonus = game.wfrp4e.config.characteristicsBonus =
{ {
"ws": "Bonus de Capacité de Combat", "ws": "Bonus de Capacité de Combat",
"bs": "Bonus de Capacité de Tir", "bs": "Bonus de Capacité de Tir",
"s": "Bonus de Force", "s": "Bonus de Force",
"t": "Bonus d'Endurance", "t": "Bonus d'Endurance",
"i": "Bonus d'Initiative", "i": "Bonus d'Initiative",
"ag": "Bonus d'Agilité", "ag": "Bonus d'Agilité",
"dex": "Bonus de Dexterité", "dex": "Bonus de Dexterité",
"int": "Bonus d'Intelligence", "int": "Bonus d'Intelligence",
"wp": "Bonus de Force Mentale", "wp": "Bonus de Force Mentale",
"fel": "Bonus de Sociabilité" "fel": "Bonus de Sociabilité"
} }
} }
if (game.wfrp4e.config.classTrappings) { if (game.wfrp4e.config.classTrappings) {
for(const c of Object.keys(game.wfrp4e.config.classTrappings)) { for (const c of Object.keys(game.wfrp4e.config.classTrappings)) {
game.wfrp4e.config.classTrappings[game.i18n.localize(c)] = game.wfrp4e.config.classTrappings[c]; game.wfrp4e.config.classTrappings[game.i18n.localize(c)] = game.wfrp4e.config.classTrappings[c];
} }
} }

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
MANIFEST-001134 MANIFEST-001210

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.444091 7ff2609fa6c0 Recovering log #1132 2025/10/13-20:51:30.026251 7f189ffff6c0 Recovering log #1208
2025/06/04-17:19:09.455068 7ff2609fa6c0 Delete type=3 #1130 2025/10/13-20:51:30.036172 7f189ffff6c0 Delete type=3 #1206
2025/06/04-17:19:09.455138 7ff2609fa6c0 Delete type=0 #1132 2025/10/13-20:51:30.036225 7f189ffff6c0 Delete type=0 #1208
2025/06/04-17:45:04.305164 7ff25a3ff6c0 Level-0 table #1137: started 2025/10/13-20:58:55.958283 7f189e7fc6c0 Level-0 table #1213: started
2025/06/04-17:45:04.305197 7ff25a3ff6c0 Level-0 table #1137: 0 bytes OK 2025/10/13-20:58:55.958313 7f189e7fc6c0 Level-0 table #1213: 0 bytes OK
2025/06/04-17:45:04.311962 7ff25a3ff6c0 Delete type=0 #1135 2025/10/13-20:58:55.964593 7f189e7fc6c0 Delete type=0 #1211
2025/06/04-17:45:04.332591 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) 2025/10/13-20:58:55.985538 7f189e7fc6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:44.957251 7ff25b7fe6c0 Recovering log #1128 2025/10/13-20:40:04.059843 7f189f7fe6c0 Recovering log #1204
2025/06/04-15:28:44.967265 7ff25b7fe6c0 Delete type=3 #1126 2025/10/13-20:40:04.069741 7f189f7fe6c0 Delete type=3 #1202
2025/06/04-15:28:44.967344 7ff25b7fe6c0 Delete type=0 #1128 2025/10/13-20:40:04.069791 7f189f7fe6c0 Delete type=0 #1204
2025/06/04-16:03:30.536357 7ff25a3ff6c0 Level-0 table #1133: started 2025/10/13-20:45:59.586645 7f189e7fc6c0 Level-0 table #1209: started
2025/06/04-16:03:30.536423 7ff25a3ff6c0 Level-0 table #1133: 0 bytes OK 2025/10/13-20:45:59.586692 7f189e7fc6c0 Level-0 table #1209: 0 bytes OK
2025/06/04-16:03:30.543881 7ff25a3ff6c0 Delete type=0 #1131 2025/10/13-20:45:59.620022 7f189e7fc6c0 Delete type=0 #1207
2025/06/04-16:03:30.557944 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.620203 7f189e7fc6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001136 MANIFEST-001212

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.458785 7ff25affd6c0 Recovering log #1134 2025/10/13-20:51:30.039766 7f189ffff6c0 Recovering log #1210
2025/06/04-17:19:09.468745 7ff25affd6c0 Delete type=3 #1132 2025/10/13-20:51:30.049183 7f189ffff6c0 Delete type=3 #1208
2025/06/04-17:19:09.468888 7ff25affd6c0 Delete type=0 #1134 2025/10/13-20:51:30.049237 7f189ffff6c0 Delete type=0 #1210
2025/06/04-17:45:04.318439 7ff25a3ff6c0 Level-0 table #1139: started 2025/10/13-20:58:55.972493 7f189e7fc6c0 Level-0 table #1215: started
2025/06/04-17:45:04.318469 7ff25a3ff6c0 Level-0 table #1139: 0 bytes OK 2025/10/13-20:58:55.972514 7f189e7fc6c0 Level-0 table #1215: 0 bytes OK
2025/06/04-17:45:04.325169 7ff25a3ff6c0 Delete type=0 #1137 2025/10/13-20:58:55.978671 7f189e7fc6c0 Delete type=0 #1213
2025/06/04-17:45:04.332616 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) 2025/10/13-20:58:55.985570 7f189e7fc6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:44.973169 7ff25affd6c0 Recovering log #1130 2025/10/13-20:40:04.073059 7f189f7fe6c0 Recovering log #1206
2025/06/04-15:28:44.984459 7ff25affd6c0 Delete type=3 #1128 2025/10/13-20:40:04.082320 7f189f7fe6c0 Delete type=3 #1204
2025/06/04-15:28:44.984535 7ff25affd6c0 Delete type=0 #1130 2025/10/13-20:40:04.082396 7f189f7fe6c0 Delete type=0 #1206
2025/06/04-16:03:30.544022 7ff25a3ff6c0 Level-0 table #1135: started 2025/10/13-20:45:59.620883 7f189e7fc6c0 Level-0 table #1211: started
2025/06/04-16:03:30.544055 7ff25a3ff6c0 Level-0 table #1135: 0 bytes OK 2025/10/13-20:45:59.620913 7f189e7fc6c0 Level-0 table #1211: 0 bytes OK
2025/06/04-16:03:30.550364 7ff25a3ff6c0 Delete type=0 #1133 2025/10/13-20:45:59.655200 7f189e7fc6c0 Delete type=0 #1209
2025/06/04-16:03:30.557961 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.655399 7f189e7fc6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001134 MANIFEST-001210

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.486234 7ff25bfff6c0 Recovering log #1132 2025/10/13-20:51:30.065149 7f18a4ffa6c0 Recovering log #1208
2025/06/04-17:19:09.497211 7ff25bfff6c0 Delete type=3 #1130 2025/10/13-20:51:30.074202 7f18a4ffa6c0 Delete type=3 #1206
2025/06/04-17:19:09.497296 7ff25bfff6c0 Delete type=0 #1132 2025/10/13-20:51:30.074263 7f18a4ffa6c0 Delete type=0 #1208
2025/06/04-17:45:04.325308 7ff25a3ff6c0 Level-0 table #1137: started 2025/10/13-20:58:55.985678 7f189e7fc6c0 Level-0 table #1213: started
2025/06/04-17:45:04.325335 7ff25a3ff6c0 Level-0 table #1137: 0 bytes OK 2025/10/13-20:58:55.985714 7f189e7fc6c0 Level-0 table #1213: 0 bytes OK
2025/06/04-17:45:04.332456 7ff25a3ff6c0 Delete type=0 #1135 2025/10/13-20:58:55.992909 7f189e7fc6c0 Delete type=0 #1211
2025/06/04-17:45:04.332625 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) 2025/10/13-20:58:56.016686 7f189e7fc6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:45.008049 7ff25affd6c0 Recovering log #1128 2025/10/13-20:40:04.098338 7f18a4ffa6c0 Recovering log #1204
2025/06/04-15:28:45.018492 7ff25affd6c0 Delete type=3 #1126 2025/10/13-20:40:04.107962 7f18a4ffa6c0 Delete type=3 #1202
2025/06/04-15:28:45.018631 7ff25affd6c0 Delete type=0 #1128 2025/10/13-20:40:04.108019 7f18a4ffa6c0 Delete type=0 #1204
2025/06/04-16:03:30.558067 7ff25a3ff6c0 Level-0 table #1133: started 2025/10/13-20:45:59.692466 7f189e7fc6c0 Level-0 table #1209: started
2025/06/04-16:03:30.558110 7ff25a3ff6c0 Level-0 table #1133: 0 bytes OK 2025/10/13-20:45:59.692489 7f189e7fc6c0 Level-0 table #1209: 0 bytes OK
2025/06/04-16:03:30.564426 7ff25a3ff6c0 Delete type=0 #1131 2025/10/13-20:45:59.729240 7f189e7fc6c0 Delete type=0 #1207
2025/06/04-16:03:30.593650 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.729423 7f189e7fc6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001134 MANIFEST-001210

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.429340 7ff25b7fe6c0 Recovering log #1132 2025/10/13-20:51:30.014097 7f189ffff6c0 Recovering log #1208
2025/06/04-17:19:09.439947 7ff25b7fe6c0 Delete type=3 #1130 2025/10/13-20:51:30.023727 7f189ffff6c0 Delete type=3 #1206
2025/06/04-17:19:09.440019 7ff25b7fe6c0 Delete type=0 #1132 2025/10/13-20:51:30.023794 7f189ffff6c0 Delete type=0 #1208
2025/06/04-17:45:04.298490 7ff25a3ff6c0 Level-0 table #1137: started 2025/10/13-20:58:55.964704 7f189e7fc6c0 Level-0 table #1213: started
2025/06/04-17:45:04.298520 7ff25a3ff6c0 Level-0 table #1137: 0 bytes OK 2025/10/13-20:58:55.964734 7f189e7fc6c0 Level-0 table #1213: 0 bytes OK
2025/06/04-17:45:04.304763 7ff25a3ff6c0 Delete type=0 #1135 2025/10/13-20:58:55.972375 7f189e7fc6c0 Delete type=0 #1211
2025/06/04-17:45:04.305020 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) 2025/10/13-20:58:55.985556 7f189e7fc6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:44.939372 7ff2609fa6c0 Recovering log #1128 2025/10/13-20:40:04.047360 7f189f7fe6c0 Recovering log #1204
2025/06/04-15:28:44.950220 7ff2609fa6c0 Delete type=3 #1126 2025/10/13-20:40:04.057386 7f189f7fe6c0 Delete type=3 #1202
2025/06/04-15:28:44.950355 7ff2609fa6c0 Delete type=0 #1128 2025/10/13-20:40:04.057445 7f189f7fe6c0 Delete type=0 #1204
2025/06/04-16:03:30.528726 7ff25a3ff6c0 Level-0 table #1133: started 2025/10/13-20:45:59.550286 7f189e7fc6c0 Level-0 table #1209: started
2025/06/04-16:03:30.528791 7ff25a3ff6c0 Level-0 table #1133: 0 bytes OK 2025/10/13-20:45:59.550321 7f189e7fc6c0 Level-0 table #1209: 0 bytes OK
2025/06/04-16:03:30.536083 7ff25a3ff6c0 Delete type=0 #1131 2025/10/13-20:45:59.585680 7f189e7fc6c0 Delete type=0 #1207
2025/06/04-16:03:30.557927 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.585866 7f189e7fc6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001134 MANIFEST-001210

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.415218 7ff2609fa6c0 Recovering log #1132 2025/10/13-20:51:30.000150 7f18a4ffa6c0 Recovering log #1208
2025/06/04-17:19:09.425579 7ff2609fa6c0 Delete type=3 #1130 2025/10/13-20:51:30.010745 7f18a4ffa6c0 Delete type=3 #1206
2025/06/04-17:19:09.425663 7ff2609fa6c0 Delete type=0 #1132 2025/10/13-20:51:30.010844 7f18a4ffa6c0 Delete type=0 #1208
2025/06/04-17:45:04.291860 7ff25a3ff6c0 Level-0 table #1137: started 2025/10/13-20:58:55.951435 7f189e7fc6c0 Level-0 table #1213: started
2025/06/04-17:45:04.291911 7ff25a3ff6c0 Level-0 table #1137: 0 bytes OK 2025/10/13-20:58:55.951483 7f189e7fc6c0 Level-0 table #1213: 0 bytes OK
2025/06/04-17:45:04.298331 7ff25a3ff6c0 Delete type=0 #1135 2025/10/13-20:58:55.957942 7f189e7fc6c0 Delete type=0 #1211
2025/06/04-17:45:04.305006 7ff25a3ff6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) 2025/10/13-20:58:55.958168 7f189e7fc6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:44.907467 7ff25affd6c0 Recovering log #1128 2025/10/13-20:40:04.033243 7f18a4ffa6c0 Recovering log #1204
2025/06/04-15:28:44.933287 7ff25affd6c0 Delete type=3 #1126 2025/10/13-20:40:04.043812 7f18a4ffa6c0 Delete type=3 #1202
2025/06/04-15:28:44.933354 7ff25affd6c0 Delete type=0 #1128 2025/10/13-20:40:04.043882 7f18a4ffa6c0 Delete type=0 #1204
2025/06/04-16:03:30.521711 7ff25a3ff6c0 Level-0 table #1133: started 2025/10/13-20:45:59.516419 7f189e7fc6c0 Level-0 table #1209: started
2025/06/04-16:03:30.521751 7ff25a3ff6c0 Level-0 table #1133: 0 bytes OK 2025/10/13-20:45:59.516460 7f189e7fc6c0 Level-0 table #1209: 0 bytes OK
2025/06/04-16:03:30.528207 7ff25a3ff6c0 Delete type=0 #1131 2025/10/13-20:45:59.549549 7f189e7fc6c0 Delete type=0 #1207
2025/06/04-16:03:30.528580 7ff25a3ff6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.549682 7f189e7fc6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000777 MANIFEST-000853

View File

@@ -1,7 +1,7 @@
2025/06/04-17:19:09.473204 7ff2609fa6c0 Recovering log #775 2025/10/13-20:51:30.051499 7f18a4ffa6c0 Recovering log #851
2025/06/04-17:19:09.483139 7ff2609fa6c0 Delete type=3 #773 2025/10/13-20:51:30.062133 7f18a4ffa6c0 Delete type=3 #849
2025/06/04-17:19:09.483218 7ff2609fa6c0 Delete type=0 #775 2025/10/13-20:51:30.062204 7f18a4ffa6c0 Delete type=0 #851
2025/06/04-17:45:04.312115 7ff25a3ff6c0 Level-0 table #780: started 2025/10/13-20:58:55.978922 7f189e7fc6c0 Level-0 table #856: started
2025/06/04-17:45:04.312145 7ff25a3ff6c0 Level-0 table #780: 0 bytes OK 2025/10/13-20:58:55.978979 7f189e7fc6c0 Level-0 table #856: 0 bytes OK
2025/06/04-17:45:04.318313 7ff25a3ff6c0 Delete type=0 #778 2025/10/13-20:58:55.985424 7f189e7fc6c0 Delete type=0 #854
2025/06/04-17:45:04.332603 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) 2025/10/13-20:58:55.985583 7f189e7fc6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2025/06/04-15:28:44.990819 7ff25b7fe6c0 Recovering log #771 2025/10/13-20:40:04.084989 7f18a4ffa6c0 Recovering log #847
2025/06/04-15:28:45.002034 7ff25b7fe6c0 Delete type=3 #769 2025/10/13-20:40:04.095584 7f18a4ffa6c0 Delete type=3 #845
2025/06/04-15:28:45.002200 7ff25b7fe6c0 Delete type=0 #771 2025/10/13-20:40:04.095650 7f18a4ffa6c0 Delete type=0 #847
2025/06/04-16:03:30.550493 7ff25a3ff6c0 Level-0 table #776: started 2025/10/13-20:45:59.656500 7f189e7fc6c0 Level-0 table #852: started
2025/06/04-16:03:30.550525 7ff25a3ff6c0 Level-0 table #776: 0 bytes OK 2025/10/13-20:45:59.656553 7f189e7fc6c0 Level-0 table #852: 0 bytes OK
2025/06/04-16:03:30.557793 7ff25a3ff6c0 Delete type=0 #774 2025/10/13-20:45:59.691824 7f189e7fc6c0 Delete type=0 #850
2025/06/04-16:03:30.557980 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) 2025/10/13-20:45:59.691954 7f189e7fc6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)