From 7a1ab146d48fe4bfe9f4c265cd40ac788e64e2a4 Mon Sep 17 00:00:00 2001 From: Roland Gaida Date: Sun, 21 Dec 2025 01:23:59 +0100 Subject: [PATCH 1/3] Add German localization --- TimeLoop/resources/i18n/de_de.json | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 TimeLoop/resources/i18n/de_de.json diff --git a/TimeLoop/resources/i18n/de_de.json b/TimeLoop/resources/i18n/de_de.json new file mode 100644 index 0000000..dad2608 --- /dev/null +++ b/TimeLoop/resources/i18n/de_de.json @@ -0,0 +1,75 @@ +{ + "prefix": "[TimeLoop]", + "authorized": "Autorisiert", + "unauthorized": "Nicht autorisiert", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "is": "IST", + "is_not": "IST NICHT", + "infinite": "Unendlich", + "always": "Immer", + "whitelist": "Whitelist", + "threshold": "Schwellenwert", + "whitelistedthreshold": "Whitelist-Schwellenwert", + "log_loading_config": "Lade Konfigurationsdatei...", + "log_corrupt_config": "Die Konfigurationsdatei ist beschädigt oder existiert nicht.", + "log_creating_config": "Erstelle Konfigurationsdatei...", + "log_finished_config": "Konfiguration geladen.", + "log_updated_config": "Konfiguration aktualisiert.", + "log_loopstate_daystoskip_reset": "Setze Tage zum Überspringen der Schleife zurück.", + "log_loopstate_status": "Fließt die Zeit? {0} | Tage zum Überspringen: {1}", + "log_loop_daystoskip_active": "Überspringe die Schleife für heute. Verbleibend: {0} Tage", + "log_loop_dayloop": "Zeit zurückgesetzt.", + "log_loop_limit": "Schleifen: {0}/{1}", + "log_player_disconected": "Spieler getrennt. Aktualisiere Schleifenparameter.", + "log_player_connected": "Spieler angemeldet. Aktualisiere Schleifenparameter.", + "log_player_new": "Spieler {0} ({1}) zur Konfiguration hinzugefügt", + "log_player_data_not_found": "Spielerdaten für Spieler {0} konnten nicht gefunden werden.", + "onlogin_timeloop_active": "TimeLoop ist aktiv. Der Tag wird um Mitternacht zurückgesetzt.", + "loopstate_update_activated": "Du scheinst am selben Tag festzustecken.", + "loopstate_update_deactivated": "Die Zeit fließt normal.", + "loop_skip": "Überspringe die Schleife.", + "loop_daystoskip_active": "Die nächsten {0} Tag(e) werden NICHT in einer Schleife sein", + "loop_dayloop": "Tag zurücksetzen", + "loop_limitreached": "Schleifenlimit erreicht.", + "cmd_invalid_param": "Ungültiger Parameter. Erwartet {0}, erhalten {1}.", + "cmd_invalid_param_count": "Ungültige Anzahl von Parametern. Erwartet {0}, erhalten {1}.", + "cmd_invalid_param_type": "Ungültiger Typ für Parameter {0}. Erwartet {1}, erhalten {2}.", + "cmd_player_not_found": "Client {0} konnte in der Datenbank nicht gefunden werden.", + "cmd_authorize_help": "Verwendung:\n(Whitelist-Modus)\ntl_auth <0/1> - Autorisiert einen Spieler, die Zeitschleife zu verlassen.\n - Spielername oder Plattform-ID des zu autorisierenden Spielers.\n <0/1> - 0 für nicht autorisiert, 1 für autorisiert", + "cmd_authorize_desc": "Autorisiert einen Spieler, die Zeitschleife zu verlassen.", + "cmd_authorized_return": "Client {1} {0} zum Überspringen der Zeitschleife", + "cmd_enable_help": "Verwendung:\ntl_enable <0/1>\n 0 - Deaktiviert die Mod.\n 1 - Aktiviert die Mod.", + "cmd_enable_desc": "Aktiviert oder deaktiviert die Mod", + "cmd_enable_state": "Ist die Mod aktiviert? {0}", + "cmd_enable_return": "Time Looper wurde {0}", + "cmd_list_help": "Verwendung:\ntl_list :\n all - Listet alle Benutzer in der Datenbank\n auth - Listet alle autorisierten Benutzer\n unauth - Listet alle nicht autorisierten Benutzer", + "cmd_list_desc": "Listet alle Benutzer in der Datenbank", + "cmd_list_no_users": "Keine Benutzer in der Datenbank", + "cmd_list_format": "Spieler: {0}, Plattform-ID: {1}, Autorisiert? {2}", + "cmd_list_return": "{0} Gesamt: {1}", + "cmd_loopstate_help": "Verwendung:\ntl_state\n Zeigt an, ob der aktuelle Tag in einer Schleife ist oder nicht.", + "cmd_loopstate_desc": "Zeigt an, ob der aktuelle Tag in einer Schleife ist oder nicht.", + "cmd_loopstate_return": "Aktueller Tag {0} in Schleife", + "cmd_looplimit_help": "Verwendung:\ntl_looplimit \n - Die Anzahl der Schleifen, die ein Tag haben kann. 0 für unendliche Schleifen.", + "cmd_looplimit_desc": "Begrenzt die Anzahl der Schleifen, die ein Tag haben kann.", + "cmd_looplimit_state": "Aktuelles Schleifenlimit ist {0}", + "cmd_looplimit_return": "Schleifenlimit auf {0} gesetzt", + "cmd_minplayers_help": "Verwendung:\n(Schwellenwert-Modus)\ntl_minplayers \n - Mindestanzahl von Spielern für normalen Zeitfluss", + "cmd_minplayers_desc": "(Im Schwellenwert-Modus) Ändert die Mindestspieleranforderung für normalen Zeitfluss", + "cmd_minplayers_state": "Mindestanzahl benötigter Spieler: {0}", + "cmd_minplayers_return": "Mindestspieleranforderung geändert auf {0}", + "cmd_mode_help": "Verwendung:\ntl_mode <0/1/2/3>\n 0 - Deaktiviert die Mod.\n 1 - Wechsel zum Whitelist-Modus\n 2 - Wechsel zum Schwellenwert-Modus\n 3 - Wechsel zum Whitelist-Schwellenwert-Modus", + "cmd_mode_desc": "Ändert den Modus des TimeLoopers", + "cmd_mode_invalid_mode": "Ungültiger Modus angegeben.", + "cmd_mode_state": "Aktueller Modus: {0}", + "cmd_mode_return": "Modus geändert auf {0}.", + "cmd_skipdays_help": "Verwendung:\ntl_skipdays \n - Die Anzahl der Tage, die das Schleifen überspringen soll.", + "cmd_skipdays_desc": "Überspringt das Schleifen für N Tage.", + "cmd_skipdays_return_disabled": "Keine Tage werden die Schleife überspringen.", + "cmd_skipdays_return_enabled": "Die nächsten {0} Tag(e) werden die Schleife überspringen", + "cmd_locale_help": "Verwendung:\ntl_locale \n\t Die verfügbare Sprache im i18n-Ordner, ohne .json", + "cmd_locale_desc": "Ändert die aktuelle Sprache", + "cmd_locale_state": "Aktuelle Sprache ist {0}\nListe der verfügbaren Sprachen: {1}", + "cmd_locale_return": "Sprache geändert auf {0}" +} \ No newline at end of file From 6970aa96fe094549b49a99b7ad4a5fc5f129ee62 Mon Sep 17 00:00:00 2001 From: Roland Gaida Date: Sun, 21 Dec 2025 01:30:50 +0100 Subject: [PATCH 2/3] fix(locale): replace SimpleJson2 with System.Text.Json for locale deserialization --- TimeLoop/TimeLoop.csproj | 10 +++++++--- TimeLoop/src/Managers/LocaleManager.cs | 6 ++++-- depts/README.md | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/TimeLoop/TimeLoop.csproj b/TimeLoop/TimeLoop.csproj index 0e569da..e339fea 100644 --- a/TimeLoop/TimeLoop.csproj +++ b/TimeLoop/TimeLoop.csproj @@ -3,8 +3,6 @@ netstandard2.1 enable - Z:\TimeLoop - Z:\Mods\TimeLoop False false false @@ -18,9 +16,12 @@ $(DefineConstants) x64 - Z:\Mods\TimeLoop_Release\ + + + + ..\depts\0Harmony.dll @@ -28,6 +29,9 @@ ..\depts\Assembly-CSharp.dll + + ..\depts\System.ValueTuple.dll + ..\depts\LogLibrary.dll diff --git a/TimeLoop/src/Managers/LocaleManager.cs b/TimeLoop/src/Managers/LocaleManager.cs index e0d9d7b..770ee1c 100644 --- a/TimeLoop/src/Managers/LocaleManager.cs +++ b/TimeLoop/src/Managers/LocaleManager.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using static SimpleJson2.SimpleJson2; +using System.Text.Json; namespace TimeLoop.Managers { public class LocaleManager { @@ -53,7 +53,9 @@ private Dictionary LoadLocale(string locale) { LoadedLocale = Path.GetFileNameWithoutExtension(localePath); using var stream = new StreamReader(localePath); - return DeserializeObject>(stream.ReadToEnd()); + var json = stream.ReadToEnd(); + return JsonSerializer.Deserialize>(json) + ?? new Dictionary(); } catch (Exception e) { Log.Error("[TimeLoop] Failed to load localization file. {0}", e.Message); diff --git a/depts/README.md b/depts/README.md index e3bc73c..73d3d8a 100644 --- a/depts/README.md +++ b/depts/README.md @@ -3,6 +3,7 @@ For the mod to be compiled, you need the following DLLs: + 0Harmony.dll + Assembly-CSharp.dll ++ System.ValueTuple.dll + LogLibrary.dll + UnityEngine.dll + UnityEngine.CoreModule.dll From 576733d52f549af9d59d4dcb4a5294c0041ffc67 Mon Sep 17 00:00:00 2001 From: Roland Gaida Date: Sun, 21 Dec 2025 01:35:31 +0100 Subject: [PATCH 3/3] chore(mod): update version to 4.0.2 and update author and website information --- TimeLoop/resources/ModInfo.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TimeLoop/resources/ModInfo.xml b/TimeLoop/resources/ModInfo.xml index 1a877b9..9fab1b3 100644 --- a/TimeLoop/resources/ModInfo.xml +++ b/TimeLoop/resources/ModInfo.xml @@ -1,10 +1,10 @@  - + - - + +