diff --git a/docs/README.be.md b/docs/README.be.md index 3c677d29..2bdde26d 100644 --- a/docs/README.be.md +++ b/docs/README.be.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.cs.md b/docs/README.cs.md index 6e4a94cf..30bb39b7 100644 --- a/docs/README.cs.md +++ b/docs/README.cs.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Katalog](./screenshot.png) diff --git a/docs/README.da.md b/docs/README.da.md index 2968798f..79513fe3 100644 --- a/docs/README.da.md +++ b/docs/README.da.md @@ -24,7 +24,7 @@ [![ita](https://img.shields.io/badge/lang-it-red)](README.it.md) [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.de.md b/docs/README.de.md index d560c6b9..45ef0fec 100644 --- a/docs/README.de.md +++ b/docs/README.de.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Katalog](./screenshot.png) diff --git a/docs/README.es.md b/docs/README.es.md index 94097be5..4209e94f 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.fr.md b/docs/README.fr.md index 1ffd0ddc..0c35e059 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Catalogue Hydra](./screenshot.png) diff --git a/docs/README.it.md b/docs/README.it.md index 29be8e49..e87cf28e 100644 --- a/docs/README.it.md +++ b/docs/README.it.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.nb.md b/docs/README.nb.md index 581baf98..1ec4744b 100644 --- a/docs/README.nb.md +++ b/docs/README.nb.md @@ -24,7 +24,7 @@ [![ita](https://img.shields.io/badge/lang-it-red)](README.it.md) [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.pl.md b/docs/README.pl.md index b04e4ebc..2fb31a6d 100644 --- a/docs/README.pl.md +++ b/docs/README.pl.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.pt-BR.md b/docs/README.pt-BR.md index abc66ea4..7a2971c8 100644 --- a/docs/README.pt-BR.md +++ b/docs/README.pt-BR.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.ru.md b/docs/README.ru.md index 57aed03c..1ce831f7 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/docs/README.uk-UA.md b/docs/README.uk-UA.md index 4da5d980..8fec8508 100644 --- a/docs/README.uk-UA.md +++ b/docs/README.uk-UA.md @@ -25,7 +25,7 @@ [![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md) [![da](https://img.shields.io/badge/lang-da-red)](README.da.md) [![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md) -[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) +[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md) ![Hydra Catalogue](./screenshot.png) diff --git a/src/locales/index.ts b/src/locales/index.ts index e2df4551..26d15b61 100644 --- a/src/locales/index.ts +++ b/src/locales/index.ts @@ -51,5 +51,5 @@ export default { kk, cs, nb, - et + et, }; diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index c79c0847..e71668e8 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -367,6 +367,7 @@ "animated_profile_picture": "Fotos de perfil animadas", "premium_support": "Suporte Premium", "show_and_compare_achievements": "Exiba e compare suas conquistas com outros usuários", - "animated_profile_banner": "Banner animado no perfil" + "animated_profile_banner": "Banner animado no perfil", + "cloud_saving": "Saves na Cloud (até {{gameCount}} jogos)" } } diff --git a/src/main/services/achievements/find-achivement-files.ts b/src/main/services/achievements/find-achivement-files.ts index 9195c13a..85c5b767 100644 --- a/src/main/services/achievements/find-achivement-files.ts +++ b/src/main/services/achievements/find-achivement-files.ts @@ -71,6 +71,7 @@ const crackers = [ Cracker.smartSteamEmu, Cracker.empress, Cracker.flt, + Cracker.razor1911, ]; const getPathFromCracker = (cracker: Cracker) => { @@ -221,6 +222,15 @@ const getPathFromCracker = (cracker: Cracker) => { ]; } + if (cracker == Cracker.razor1911) { + return [ + { + folderPath: path.join(appData, ".1911"), + fileLocation: ["achievement"], + }, + ]; + } + achievementsLogger.error(`Cracker ${cracker} not implemented`); throw new Error(`Cracker ${cracker} not implemented`); }; diff --git a/src/main/services/achievements/parse-achievement-file.ts b/src/main/services/achievements/parse-achievement-file.ts index 07854935..38b388ca 100644 --- a/src/main/services/achievements/parse-achievement-file.ts +++ b/src/main/services/achievements/parse-achievement-file.ts @@ -65,6 +65,10 @@ export const parseAchievementFile = ( return processCreamAPI(parsed); } + if (type === Cracker.razor1911) { + return processRazor1911(filePath); + } + achievementsLogger.log( `Unprocessed ${type} achievements found on ${filePath}` ); @@ -111,6 +115,35 @@ const jsonParse = (filePath: string) => { } }; +const processRazor1911 = (filePath: string): UnlockedAchievement[] => { + try { + const fileContent = readFileSync(filePath, "utf-8"); + achievementsLogger.log("processing file", filePath, fileContent); + const lines = + fileContent.charCodeAt(0) === 0xfeff + ? fileContent.slice(1).split(/[\r\n]+/) + : fileContent.split(/[\r\n]+/); + + const achievements: UnlockedAchievement[] = []; + for (const line of lines) { + if (!line.length) continue; + + const [name, unlocked, unlockTime] = line.split(" "); + if (unlocked === "1") { + achievements.push({ + name, + unlockTime: Number(unlockTime) * 1000, + }); + } + } + achievementsLogger.log("processing file", achievements); + return achievements; + } catch (err) { + achievementsLogger.error(`Error processing ${filePath}`, err); + return []; + } +}; + const processOnlineFix = (unlockedAchievements: any): UnlockedAchievement[] => { const parsedUnlockedAchievements: UnlockedAchievement[] = []; diff --git a/src/shared/constants.ts b/src/shared/constants.ts index f0f6d2f0..2d313abb 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -39,4 +39,5 @@ export enum Cracker { _3dm = "3dm", flt = "FLT", rle = "RLE", + razor1911 = "RAZOR1911", }