diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ar.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ar.json index c67cc14c..15ddc9d9 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ar.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ar.json @@ -130,11 +130,9 @@ "modloader-checking_mod": "يتم التحقق: %s\n\n\n\n\n\n\n", "modloader-cyclic_dependency": "تم اكتشاف تبعية دائرية. يجب حل هذا الخطأ. لا يمكن للخادم أن يبدأ حتى يتم حل هذا وسيتم إيقاف التشغيل.\n\n\n\n\n\n\n", "modloader-dependency_container_not_initalized": "تم طلب حاوية التبعية ولكنها لم تتم مبادرتها.\n\n\n\n\n\n\n", - "modloader-error_parsing_mod_load_order": "حدث خطأ أثناء تحليل ترتيب المودات.\n\n\n\n\n\n\n", "modloader-incompatibilities_not_string_array": "يجب أن يكون Mod %s package.json الخاصية 'incompatibilities' مصفوفة سلاسل", "modloader-incompatible_mod_found": "المود {{author}}-{{name}} غير متوافق مع {{incompatibleModName}}.\n\n\n\n\n\n\n", "modloader-is_client_mod": "المود (%s) هو مود خاص بالعميل ويجب وضعه في المجلد التالي: /spt/bepinex/plugins\n\n\n\n\n\n\n", - "modloader-load_order_conflict": "{{modOneName}} و {{modTwoName}} لديهما متطلبات تعارض في ترتيب التحميل، لا يمكن للخادم أن يبدأ حتى يتم حل هذا وسيتم إيقاف التشغيل.\n\n\n\n\n\n\n", "modloader-loaded_mod": "الإضافة: الإصدار {{name}}: {{version}} من قبل {{author}} تم تحميلها", "modloader-loading_mods": "محمل الإضافات: جاري تحميل %s إضافة إلى الخادم...", "modloader-main_property_not_js": "يجب أن تكون الخاصية الرئيسية للإضافة %s ملفًا من نوع .js في الملف package.json", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/cs.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/cs.json index 2a16d8c3..972cea2b 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/cs.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/cs.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "kontroluji: %s", "modloader-cyclic_dependency": "Zjištěna cyklická závislost. Tato chyba musí být opravena. Server se nemůže spustit, dokud nebude chyba opravena a vypne se", "modloader-dependency_container_not_initalized": "Kontejner dependencí byl vyžádán, ale nebyl inicializován", - "modloader-error_parsing_mod_load_order": "Chyba parsování načítání pořadí módů", "modloader-incompatibilities_not_string_array": "Vlastnost módu %s package.json 'incompatibility' by měla být pole pro řetězec", "modloader-incompatible_mod_found": "Modifikace {{author}}-{{name}} je nekompatibilní s {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod: %s obsahuje neplatný semver string v sptVersion field. Příklady platných hodnot: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mód (%s) je klientský mód a měl by být umístěn v následující složce: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod (%s) je určen pro verzi serveru před 4.0.0. Najdi prosím odpovídající verzi nebo počkej na aktualizaci.", - "modloader-load_order_conflict": "`{{modOneName}}` a `{{modTwoName}}` mají protichůdné požadavky na pořadí načítání, server není schopen spustit, dokud nebude opraven a nebude vypnut", "modloader-loaded_mod": "Mód: {{name}} verze: {{version}} od: {{author}} načten", "modloader-loading_mods": "ModLoader: načítání modů %s serveru...", "modloader-main_property_not_js": "Mód %s package.json musí bát soubor typu .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/de.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/de.json index ed7a8476..13200b0d 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/de.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/de.json @@ -197,12 +197,10 @@ "modloader-checking_mod": "Überprüfung: %s", "modloader-cyclic_dependency": "Zyklische Abhängigkeit erkannt. Dieser Fehler muss behoben werden. Der Server kann erst gestartet werden, wenn das Problem behoben ist, und wird heruntergefahren", "modloader-dependency_container_not_initalized": "Der Abhängigkeitscontainer wurde angefordert, aber nicht initialisiert", - "modloader-error_parsing_mod_load_order": "Fehler beim Parsen der Mod-Ladereihenfolge", "modloader-incompatibilities_not_string_array": "Die Mod %s package.json Eigenschaft 'Inkompatibilitäten' sollte ein String-Array sein", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} ist nicht kompatibel mit {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod: %s enthält eine ungültige ´semver´ Zeichenkette im ´sptversions´ Feld. Beispiele für gültige Werte: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mod (%s) ist ein Client-Mod und sollte im folgenden Ordner abgelegt werden: /spt/bepinex/plugins", - "modloader-load_order_conflict": "'{{modOneName}}' und '{{modTwoName}}' haben widersprüchliche Anforderungen an die Ladereihenfolge. Der Server kann erst gestartet werden, wenn dies behoben ist, und wird heruntergefahren", "modloader-loaded_mod": "Mod: {{name}} Version: {{version}} von: {{author}} geladen", "modloader-loading_mods": "ModLoader: %s Server-Mods werden geladen...", "modloader-main_property_not_js": "Die Haupteigenschaft von Mod %s package.json muss eine .js Datei sein", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/el.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/el.json index 2a638923..77f6af2e 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/el.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/el.json @@ -205,13 +205,11 @@ "modloader-checking_mod": "έλεγχος: %s", "modloader-cyclic_dependency": "Εντοπίστηκε κυκλική εξάρτηση. Αυτό το σφάλμα πρέπει να διορθωθεί. Ο διακομιστής δεν μπορεί να ξεκινήσει μέχρι αυτό να διορθωθεί και να τερματιστεί", "modloader-dependency_container_not_initalized": "Το εξαρτώμενο δοχείο ζητήθηκε αλλά δεν εκκινήθηκε", - "modloader-error_parsing_mod_load_order": "Σφάλμα κατά την ανάλυση της σειράς φόρτωσης πρόσθετου (mod)", "modloader-incompatibilities_not_string_array": "Στο πρόσθετο %s package.json η ιδιότητα \"ασυμβατότητες\" θα πρέπει να είναι μία συστοιχία συμβολοσειρών", "modloader-incompatible_mod_found": "Το πρόσθετο {{author}}-{{name}} δεν είναι συμβατό με το {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Το πρόσθετο %s περιέχει μία μη έγκυρη semver συμβολοσειρά στο πεδίο sptVersion. Παραδείγματα έγκυρων τιμών: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Το πρόσθετο (%s) είναι ένα πρόσθετο πελάτη και θα πρέπει να τοποθετηθεί στον ακόλουθο φάκελο: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Το Mod (%s) είναι μια λειτουργία διακομιστή προ της έκδοσης 4.0.0. Παρακαλώ βρείτε την κατάλληλη έκδοση ή περιμένετε για μια ενημέρωση.", - "modloader-load_order_conflict": "Τα `{{modOneName}}` και `{{modTwoName}}` έχουν αντικρουόμενες απαιτήσεις σειράς φόρτωσης, ο διακομιστής δεν μπορεί να ξεκινήσει μέχρι να αυτό διορθωθεί και θα τερματιστεί", "modloader-loaded_mod": "Πρόσθετο: {{name}} έκδοση: {{version}} από: {{author}} φορτώθηκε", "modloader-loading_mods": "ModLoader: φόρτωση πρόσθετων %s διακομιστή...", "modloader-main_property_not_js": "Η κύρια ιδιότητα του πρόσθετου %s package.json πρέπει να είναι ένα αρχείο .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/en.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/en.json index a3647da2..2c3d87c9 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/en.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/en.json @@ -205,18 +205,18 @@ "modloader-checking_mod": "checking: %s", "modloader-cyclic_dependency": "Cyclic dependency detected. This error needs to be fixed. The server is unable to start until this is fixed and will shut down", "modloader-dependency_container_not_initalized": "The dependency container was requested but it wasn't initialized", - "modloader-error_parsing_mod_load_order": "Error parsing mod load order", "modloader-incompatibilities_not_string_array": "Mod %s package.json property 'incompatibilities' should be a string array", "modloader-incompatible_mod_found": "Mod: {{author}}-{{name}} is incompatible with: {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod: %s contains an invalid semver string in the sptVersion field. Examples of valid values: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mod (%s) is a client mod and should be placed in the following folder: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod (%s) is a pre-4.0.0 server mod. Please find the appropriate version or wait for an update.", - "modloader-load_order_conflict": "`{{modOneName}}` and `{{modTwoName}}` have conflicting load order requirements, the server is unable to start until this is fixed and will shut down", "modloader-loaded_mod": "Mod: {{name}} version: {{version}} by: {{author}} loaded", "modloader-loading_mods": "ModLoader: loading: %s server mods...", "modloader-main_property_not_js": "Mod %s package.json main property must be a .js file", "modloader-main_property_points_to_nothing": "Mod %s package.json main property points to non-existing file", "modloader-missing_dependency": "Mod: {{mod}} requires: {{modDependency}} to be installed.", + "modloader-self_dependency": "Mod {{mod}} depends on itself, please remove it from your own dependency list", + "modloader-self_incompatibility": "Mod {{mod}} is incompatible with itself, please remove it from your own incompatibilities list", "modloader-missing_package_json": "Mod: (%s) is missing a package.json. Make sure you have checked the mods hub page for install instructions", "modloader-missing_package_json_property": "Mod: {{modName}} package.json requires {{prop}} property", "modloader-missing_sptversion_field": "Mod %s is missing the sptVersion field, most likely due to being out of date and incompatible with the current version of SPT", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/es-es.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/es-es.json index fc363943..c2c3514d 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/es-es.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/es-es.json @@ -198,13 +198,11 @@ "modloader-checking_mod": "comprobando: %s", "modloader-cyclic_dependency": "Dependencia cíclica detectada", "modloader-dependency_container_not_initalized": "El contenedor de dependencias fue solicitado pero no estaba inicializado", - "modloader-error_parsing_mod_load_order": "Error al traducir el orden de las modificaciones", "modloader-incompatibilities_not_string_array": "La propiedad 'incompatibilities' de la modificacion %s package.json deberia ser un arreglo de string", "modloader-incompatible_mod_found": "La modificación {{author}}-{{name}} no es compatible con {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod %s contiene una cadena semver inválida en el campo sptVersion. Ejemplos de valores válidos: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "La modificación (%s) es de cliente, esta debería ponerse en el directorio: /spt/bepinex/plugins", "modloader-is-old-js-mod": "El Mod (%s) es para una versión anterior a la 4.0.0 del servidor. Por favor encuentre la versión adecuada o espere a una actualización.", - "modloader-load_order_conflict": "`{{modOneName}}` y `{{modTwoName}}` tienen un conflicto de requerimientos en orden de carga, el servidor en incapaz de iniciarse asta que se solucione y se apagara", "modloader-loaded_mod": "Modificacion {{name}} version {{version}} de {{author}} cargada", "modloader-loading_mods": "ModLoader: cargando %s modificaciones...", "modloader-main_property_not_js": "La propiedad 'main' de la modificacion %s package.json debe ser un archivo .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/fr.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/fr.json index 9aa8ce2f..dbdbc1df 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/fr.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/fr.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "Vérification de : %s", "modloader-cyclic_dependency": "Dépendance cyclique détectée. Cette erreur doit être résolue. Le serveur s'éteindra automatiquement tant que cela n'est pas corrigé", "modloader-dependency_container_not_initalized": "Le conteneur de dépendances a été demandé, mais n'était pas initialisé", - "modloader-error_parsing_mod_load_order": "SPT-AKI n'a pas réussi à déterminer l'ordre correct des mods", "modloader-incompatibilities_not_string_array": "la propriété 'incompatibilities' dans le fichier package.json du mod %s doit être un tableau de chaînes de caractères", "modloader-incompatible_mod_found": "Le mod {{author}}-{{name}} est incompatible avec {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Le mod %s contient une chaîne de caractères semver invalide dans le champ sptVersion. Exemples de chaînes correctes: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Le mod (%s) est un mod client et doit être placé dans le dossier suivant : /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod (%s) est un mod server pour versions antérieures à 4.0.0. Trouvez une version appropriée ou attendez que le mod soit à jour.", - "modloader-load_order_conflict": "`{{modOneName}}` et `{{modTwoName}}` ont des ordres de chargement en conflit, le serveur ne peut pas démarrer tant que ceci n'est pas corrigé et s'arrêtera", "modloader-loaded_mod": "Mod : {{name}} version : {{version}} par : {{author}} est chargé", "modloader-loading_mods": "ModLoader: Chargement des mods du serveur %s...", "modloader-main_property_not_js": "Mod %s package.json : la propriété principale doit être un fichier .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/hu.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/hu.json index 6aad597e..054af03a 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/hu.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/hu.json @@ -171,11 +171,9 @@ "modloader-checking_mod": "ellenőrzés: %s", "modloader-cyclic_dependency": "Ciklikus függőséget észleltünk. Ezt a hibát javítani kell. A szerver nem tud elindulni amíg ez meg nem történik, és le fog állni", "modloader-dependency_container_not_initalized": "A dependency container lekérve, de nincs inicializálva", - "modloader-error_parsing_mod_load_order": "Hiba a mod betöltési sorrendjének elemzésekor", "modloader-incompatibilities_not_string_array": "A Mod %s package.json „incompatibilities” tulajdonságának karakterlánc tömbnek kell lennie", "modloader-incompatible_mod_found": "{{author}}-{{name}} mod nem kompatibilis a következővel: {{incompatibleModName}}", "modloader-is_client_mod": "A következő mod (%s) egy kliens mod és a következő mappába kell helyezni: /spt/bepinex/plugins", - "modloader-load_order_conflict": "`{{modOneName}}` és`{{modTwoName}}` modoknak ellentmondásos betöltési sorrend követelményei vannak, a szerver nem tud elindulni amíg ezt nem javítják, és leáll", "modloader-loaded_mod": "Mod: {{name}} verzió: {{version}} by: {{author}} betöltve", "modloader-loading_mods": "ModLoader: %s szervermodok betöltése...", "modloader-main_property_not_js": "A mod %s package.json fő tulajdonsága egy .js fájl kell legyen", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/id.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/id.json index a03d1cf2..7e58f368 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/id.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/id.json @@ -180,11 +180,9 @@ "modloader-checking_mod": "sedang mengecek: %s", "modloader-cyclic_dependency": "Dependensi siklik terdeteksi. Masalah ini perlu dibenarkan. Server tidak bisa mulai hingga masalah ini diperbaiki dan akan dimatikan", "modloader-dependency_container_not_initalized": "Kontainer dependensi telah diminta tapi belum diinisialisasi", - "modloader-error_parsing_mod_load_order": "Permasalahan dalam penguraian urutan pemuatan mod", "modloader-incompatibilities_not_string_array": "Mod %s data package.json 'incompatibilities' harus string array", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} tidak compatibel dengan {{incompatibleModName}}", "modloader-is_client_mod": "Mod (%s) merupakan mod client dan harus dipasang dalam folder: /spt/bepinex/plugins", - "modloader-load_order_conflict": "'{{modOneName}}' dan '{{modTwoName}}' memiliki urutan pemuatan yang bertentangan, server tidak bisa mulai hingga masalah ini diperbaiki dan akan dimatikan", "modloader-loaded_mod": "Mod: {{name}} versi: {{version}} oleh: {{author}} dimuat", "modloader-loading_mods": "ModLoader: loading %s server mods...", "modloader-main_property_not_js": "Mod %s properti utama package.json harus berupa file .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/it.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/it.json index 10f6c4b7..0c1767f4 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/it.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/it.json @@ -205,13 +205,11 @@ "modloader-checking_mod": "controllo: %s", "modloader-cyclic_dependency": "Dipendenza ciclica individuata. Questo errore va risolto. Il server non potrà partire finché questo non sarà risolto e si arresterà", "modloader-dependency_container_not_initalized": "Il contenitore di dipendenze è richiesto ma non è inizializzato", - "modloader-error_parsing_mod_load_order": "Errore nel processare l'ordine di caricamento della mod", "modloader-incompatibilities_not_string_array": "Le proprietà 'incompatibilities' della mod %s, nel package.json, devono essere uno string array", "modloader-incompatible_mod_found": "La mod {{author}}-{{name}} è incompatibile con {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "La mod %s contiene una stringa semver non valida nel campo akiVersion. Esempi di valori validi: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "La mod (%s) è una mod del client e dovrebbe essere posizionata nella seguente cartella: /spt/bepinex/plugins", "modloader-is-old-js-mod": "La Mod (%s) è una server mod pre-4.0.0. Si prega di utilizzare la versione appropriata della mod o aspettare che venga aggiornata.", - "modloader-load_order_conflict": "Il server si spegnerà perché i requisiti dell'ordine di carico per `{{modOneName}}` e `{{modTwoName}}` sono in conflitto. Sistemali prima di avviare", "modloader-loaded_mod": "Caricata la mod {{name}}, versione{{version}}, di {{author}} ", "modloader-loading_mods": "ModLoader: caricamento %s mods del server...", "modloader-main_property_not_js": "La proprietà 'main' del package.json della mod %s deve essere un file .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ja.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ja.json index 5f4fdc53..0079777b 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ja.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ja.json @@ -185,13 +185,11 @@ "modloader-checking_mod": "チェック中: %s", "modloader-cyclic_dependency": "循環依存が検出されました。", "modloader-dependency_container_not_initalized": "依存関係コンテナーが要求されましたが、初期化されませんでした", - "modloader-error_parsing_mod_load_order": "mod ロード順の解析中にエラーが発生しました。", "modloader-incompatibilities_not_string_array": "Mod %s package.json プロパティ '非互換性' は文字列配列でなければなりません。", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} is incompatible with {{incompatibleModName}}。", "modloader-invalid_sptVersion_field": "Mod %s の sptVersion フィールドで不正な Semver 文字列が使用されています。正しい例はこちら: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "モッド %s はクライアントタイプのモッドです。正しいインストール先はこちら: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod %s は 4.0.0 より前のバージョン向けのModです。適切なバージョンを見つけるか、アップデートされるまでお待ちください。", - "modloader-load_order_conflict": "`{{modOneName}}` と `{{modTwoName}}` のロードの順序の条件が競合しています。 これが修正されるまでサーバーを起動できずシャットダウンします", "modloader-loaded_mod": "モッド {{name}} バージョン{{version}} 作者 {{author}} 読み込む完了。", "modloader-loading_mods": "モッド読み込むツール: %s 個のモッド読み込む中...", "modloader-main_property_not_js": "モッド %s のpackage.jsonの主要プロパティは .js ファイルである必要があります。", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ko.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ko.json index 75963e8c..3479c509 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ko.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ko.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "모드 확인 중: %s", "modloader-cyclic_dependency": "순환 종속되는 모드가 발견되었습니다", "modloader-dependency_container_not_initalized": "종속되는 컨테이너를 요청했으나 컨테이너의 초기화가 되어있지 않았습니다", - "modloader-error_parsing_mod_load_order": "모드 순서를 가져오는데 오류가 발생하였습니다", "modloader-incompatibilities_not_string_array": "모드 %s 의 package.json 파일 중 'incompatibilities' 속성은 문자 배열 타입이어야 합니다", "modloader-incompatible_mod_found": "모드 {{author}}-{{name}} 는 {{incompatibleModName}} 모드와 호환되지 않습니다", "modloader-invalid_sptVersion_field": "모드 %s 가 sptVersion 필드에 부적합한 semver 스트링 값을 보유하고 있습니다. 올바른 값들의 예시: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "모드 (%s) 는 클라이언트 모드로 '/spt/bepinex/plugins' 폴더에 위치해야 합니다", "modloader-is-old-js-mod": "%s 모드는 4.0 이전 버전용 서버모드입니다. 올바른 버전을 찾아 다시 설치하거나 모드가 업데이트 되기를 기다리세요.", - "modloader-load_order_conflict": "`{{modOneName}}` 과 `{{modTwoName}}` 는 요구되는 모드 순서가 서로 충돌됩니다, 이 문제를 해결하기 전까지 서버를 실행할 수 없으며 서버가 종료됩니다", "modloader-loaded_mod": "모드 {{name}} 버전 {{version}} by {{author}} 불러옴", "modloader-loading_mods": "ModLoader: 총 %s 개의 모드 불러오는 중...", "modloader-main_property_not_js": "모드 %s 의 package.json 파일 중 main 속성은 무조건 .js 파일을 설정해야합니다", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/nl.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/nl.json index e75b7387..8ce13e9e 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/nl.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/nl.json @@ -205,13 +205,11 @@ "modloader-checking_mod": "wordt gecontroleerd: %s", "modloader-cyclic_dependency": "Cyclische dependency gedetecteerd", "modloader-dependency_container_not_initalized": "De afhankelijkheid container was opgevraagd werd maar niet geïnitialiseerd", - "modloader-error_parsing_mod_load_order": "Fout tijdens het parsen van de mod laadvolgorde", "modloader-incompatibilities_not_string_array": "Mod %s package.json property 'incompatibilities' moet een string array zijn", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} is niet compatibel met {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod: %s bevat een ongeldige semver string in het sptVersion veld. Voorbeelden van geldige waarden: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mod (%s) is een client mod en moet in de volgende map geplaatst worden: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod (%s) is een pre-4.0.0 server mod. Zoek de juiste versie of wacht op een update.", - "modloader-load_order_conflict": "`{{modOneName}}` en`{{modTwoName}}` hebben een conflict in de volgorde van laden, de server kan niet opstarten tot het conflict is opgelost. De server word gestopt", "modloader-loaded_mod": "Mod {{name}} versie{{version}} door {{author}} is geladen", "modloader-loading_mods": "ModLoader: %s mods worden ingeladen op server...", "modloader-main_property_not_js": "Mod %s package.json main property moet een .js bestand zijn", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/no.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/no.json index 19f68c4b..661dec20 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/no.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/no.json @@ -126,11 +126,9 @@ "modloader-checking_mod": "sjekker: %s", "modloader-cyclic_dependency": "Syklisk avhengighet oppdaget. Denne feilen må løses. Serveren kan ikke starte før dette er fikset og vil stoppe", "modloader-dependency_container_not_initalized": "Avhengighetsbeholderen ble forespurt, men den ble ikke initialisert", - "modloader-error_parsing_mod_load_order": "Feil under parsing av mod lastings rekkefølge", "modloader-incompatibilities_not_string_array": "Mod %s package.json egenskaps 'inkompatibiliteter' bør være en streng array", "modloader-incompatible_mod_found": "Mod {{author}}–{{name}} er inkompatibel med {{incompatibleModName}}", "modloader-is_client_mod": "Mod (%s) er en klientmod og skal plasseres i følgende mappe: /spt/bepinex/plugins", - "modloader-load_order_conflict": "`{{modOneName}}` og `{{modTwoName}}` har motstridende krav for innlastingsrekkefølge. serveren kan ikke starte før dette er fikset og vil slå seg av", "modloader-loaded_mod": "Mod: {{name}} versjon: {{version}} av: {{author}} lastet inn", "modloader-loading_mods": "ModLoader: laster inn %s server mods...", "modloader-main_property_not_js": "Mod %s package.json hovedegenskap må være en .js-fil", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pl.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pl.json index 63914124..019faec2 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pl.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pl.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "sprawdzanie: %s", "modloader-cyclic_dependency": "Wykryto cykliczną zależność. Ten błąd powinien zostać naprawiony. Serwer nie może wystartować, dopóki błąd występuje i zostanie teraz wyłączony", "modloader-dependency_container_not_initalized": "Kontener zależności został wywołany, ale nie został zainicjowany", - "modloader-error_parsing_mod_load_order": "Błąd analizowania kolejności ładowania modów", "modloader-incompatibilities_not_string_array": "Mod %s właściwość package.json 'incompatibilities' powinna być tabelą string", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} jest niezgodny z {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "Mod %s zawiera nieprawidłowy string semver w polu sptVersion. Przykłady prawidłowych wartości: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mod (%s) jest modem klienta i powinien zostać umieszczony w następującym folderze: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Modyfikacja (%s) jest modem serwera sprzed wersji 4.0.0. Znajdź odpowiednią wersję lub poczekaj na aktualizację.", - "modloader-load_order_conflict": "`{{modOneName}}` and `{{modTwoName}}` mają sprzeczne wymagania dotyczące kolejności ładowania, serwer nie może się uruchomić, dopóki błąd występuje i zostanie teraz wyłączony", "modloader-loaded_mod": "Załadowany mod: {{name}} wersja: {{version}} autor: {{author}}", "modloader-loading_mods": "ModLoader: ładowanie %s modów serwera...", "modloader-main_property_not_js": "Główna właściwość package.json modu %s musi być plikiem .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-br.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-br.json index 9e25dcf2..1359af8a 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-br.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-br.json @@ -197,13 +197,11 @@ "modloader-checking_mod": "verificando: %s", "modloader-cyclic_dependency": "Detecção de dependência cíclica. Este erro precisa ser corrigido. O servidor não conseguirá iniciar até que isso seja resolvido e será encerrado", "modloader-dependency_container_not_initalized": "O contêiner de dependência foi solicitado, mas não foi inicializado", - "modloader-error_parsing_mod_load_order": "Erro ao analisar a ordem de carregamento do mod", "modloader-incompatibilities_not_string_array": "A propriedade 'incompatibilities' do arquivo package.json do mod %s deveria ser uma matriz de strings", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} é incompatível com {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "O mod %s contém uma string semver inválida no campo sptVersion. Exemplos de valores válidos: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "O mod (%s) é um mod de cliente e deve ser colocado na seguinte pasta: /spt/bepinex/plugins", "modloader-is-old-js-mod": "O mod (%s) foi feito para servidores pré-4.0.0. Por favor, busque a versão apropriada ou espere por uma atualização.", - "modloader-load_order_conflict": "{{modOneName}} e {{modTwoName}} têm requisitos de ordem de carregamento conflitantes. O servidor não conseguirá iniciar até que isso seja corrigido e será encerrado", "modloader-loaded_mod": "Mod: {{name}} versão: {{version}} por: {{author}} carregado", "modloader-loading_mods": "ModLoader: carregando mods do servidor %s...", "modloader-main_property_not_js": "O arquivo package.json do mod %s deve ter a propriedade main como um arquivo .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-pt.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-pt.json index e9366a5e..00632b41 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-pt.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/pt-pt.json @@ -131,11 +131,9 @@ "modloader-checking_mod": "verificando: %s", "modloader-cyclic_dependency": "Dependência cíclica detetada entre 2 mods. Este erro precisa de ser corrigido. O servidor é incapaz de iniciar até isto ser corrigido e será desligado", "modloader-dependency_container_not_initalized": "O dependency container foi solicitado, mas ele não foi inicializado", - "modloader-error_parsing_mod_load_order": "Erro ao analisar ordem de carregamento de mods", "modloader-incompatibilities_not_string_array": "A propriedade 'incompatibilities' no package.json do mod %s deve ser um array de strings", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} é incompatível com {{incompatibleModName}}", "modloader-is_client_mod": "Mod (%s) é um mod de cliente e deve ser colocado na seguinte pasta: /spt/bepinex/plugins", - "modloader-load_order_conflict": "O '{{modOneName}}' e '{{modTwoName}}' têm requisitos de ordem de carregamento que entram em conflito. O servidor é incapaz de iniciar e será desligado até isto ser corrigido", "modloader-loaded_mod": "Mod: {{name}} versão: {{version}} por: {{author}} carregado", "modloader-loading_mods": "ModLoader: carregando %s mods de servidor...", "modloader-main_property_not_js": "A propriedade main no package.json do mod %s deve ser um ficheiro .js", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ru.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ru.json index 24e0fd8c..2f8a18d8 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ru.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/ru.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "проверка: %s", "modloader-cyclic_dependency": "Обнаружена циклическая зависимость", "modloader-dependency_container_not_initalized": "Был запрошен контейнер зависимостей, но он не был инициализирован", - "modloader-error_parsing_mod_load_order": "Ошибка парсинга порядка загрузки модов", "modloader-incompatibilities_not_string_array": "В файле package.json мода %s свойство 'incompatibilities' должно быть массивом строк", "modloader-incompatible_mod_found": "Мод {{author}}-{{name}} не совместим с модом {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "В поле sptVersion мода %s содержится некорректная семвер-строка. См. примеры корректных значений: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Мод (%s) является модом для клиента и должен находиться в следующей папке: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Мод (%s) - это серверный мод, выпущенный до версии 4.0.0. Пожалуйста, найдите подходящую версию или дождитесь обновления.", - "modloader-load_order_conflict": "`{{modOneName}}` и `{{modTwoName}}` имеют конфликтующие требования к порядку загрузки, сервер не запустится и закроется, пока это не будет исправлено", "modloader-loaded_mod": "Мод {{name}} версии {{version}} от {{author}} загружен", "modloader-loading_mods": "Загрузчик модов: загружаем %s мод(ов/а)...", "modloader-main_property_not_js": "В файле package.json мода %s в свойстве 'main' должен быть указан .js файл", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/sv-se.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/sv-se.json index d228fea0..9fde1e12 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/sv-se.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/sv-se.json @@ -138,11 +138,9 @@ "modloader-checking_mod": "kontrollerade: %s", "modloader-cyclic_dependency": "Cykliskt beroende upptäckt", "modloader-dependency_container_not_initalized": "Beroendebehållaren efterfrågades men den initierades inte", - "modloader-error_parsing_mod_load_order": "Fel vid analys av modladdningsordning", "modloader-incompatibilities_not_string_array": "Mod %s package.json-egenskapen 'incompatibilities' bör vara en strängmatris", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}} är inkompatibel med {{incompatibleModName}}", "modloader-is_client_mod": "Mod (%s) är en klientmod och bör placeras i följande mapp: /spt/bepinex/plugins", - "modloader-load_order_conflict": "`{{modOneName}}` och `{{modTwoName}}` har motstridiga laddordningskrav, servern kan inte starta förrän detta är fixat och kommer att stängas ner", "modloader-loaded_mod": "Mod {{name}} version{{version}} av {{author}} har laddats", "modloader-loading_mods": "ModLoader: laddar %s mods...", "modloader-main_property_not_js": "Mod %s package.json huvudegenskap måste vara en .js-fil", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/tr.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/tr.json index 19db243c..844511a1 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/tr.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/tr.json @@ -203,13 +203,11 @@ "modloader-checking_mod": "kontrol ediliyor: %s", "modloader-cyclic_dependency": "Döngüsel bağımlılık algılandı", "modloader-dependency_container_not_initalized": "`{{modOneName}}` ve `{{modTwoName}}` yük sırası gereksinimleri çakışıyor, bu sorun giderilene kadar sunucu başlayamıyor ve kapanacak", - "modloader-error_parsing_mod_load_order": "Mod yükleme sırası ayrıştırılırken hata oluştu", "modloader-incompatibilities_not_string_array": "Mod %s package.json özelliği 'incompatibilities' bir dize dizisi olmalıdır", "modloader-incompatible_mod_found": "Mod {{author}}-{{name}}, {{incompatibleModName}} ile uyumsuz", "modloader-invalid_sptVersion_field": "Mod %s, sptVersion alanında geçersiz bir semver dizesi içeriyor. Geçerli değerlere örnekler: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Mod (%s) bir istemci modudur ve aşağıdaki klasöre yerleştirilmelidir: /spt/bepinex/plugins", "modloader-is-old-js-mod": "Mod (%s) 4.0.0 öncesi bir sunucu modudur. Lütfen uygun sürümü bulun veya bir güncelleme bekleyin.", - "modloader-load_order_conflict": "`{{modOneName}}` ve `{{modTwoName}}` yük sırası gereksinimleri çakışıyor, bu sorun giderilene kadar sunucu başlayamıyor ve kapanacak", "modloader-loaded_mod": "Mod: {{name}} sürüm: {{version}} tarafından: {{author}} yüklendi", "modloader-loading_mods": "ModLoader: %s sunucu modları yükleniyor...", "modloader-main_property_not_js": "Mod %s package.json ana özelliği bir .js dosyası olmalıdır", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/uk.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/uk.json index bc02b6c9..340cfce5 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/uk.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/uk.json @@ -196,12 +196,10 @@ "modloader-checking_mod": "перевірка: %s", "modloader-cyclic_dependency": "Виявлено циклічну залежність. Цю помилку необхідно виправити. Сервер не зможе запуститися, доки це не буде виправлено, і буде вимкнений", "modloader-dependency_container_not_initalized": "Було запитано контейнер залежностей, але його не було ініціалізовано", - "modloader-error_parsing_mod_load_order": "Помилка розбору порядку завантаження модулів", "modloader-incompatibilities_not_string_array": "У файлі package.json мода %s властивість 'incompatibilities' має бути масивом рядків", "modloader-incompatible_mod_found": "Мод:{{author}}-{{name}} не сумісний з:{{incompatibleModName}}", "modloader-invalid_sptVersion_field": "У полі sptVersion мода %s міститься некоректний семвер рядок. Див. приклади коректних значень: https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "Мод (%s) є модом для клієнта і повинен знаходитися в такій папці: /spt/bepinex/plugins", - "modloader-load_order_conflict": "`{{modOneName}}` і `{{modTwoName}}` мають конфліктуючи вимоги до порядку завантаження, сервер не запуститься і закриється, поки це не буде виправлено", "modloader-loaded_mod": "Мод {{name}} версії {{version}} от {{author}} завантажено", "modloader-loading_mods": "ModLoader: завантажуємо %s мод(ів/а)...", "modloader-main_property_not_js": "У файлі package.json мода %s у властивості 'main' має бути вказано .js файл", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-TW.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-TW.json index 183f33d2..6bc7ca8a 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-TW.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-TW.json @@ -84,7 +84,6 @@ "modloader-checked": "已檢查", "modloader-checking_mod": "檢查中: %s", "modloader-cyclic_dependency": "發現Cyclic dependency(循環依賴). 此錯誤必須修復. 修復前伺服器無法啟動, 伺服器將關閉", - "modloader-load_order_conflict": "模組 `{{modOneName}}` 和模組 `{{modTwoName}}` 發現載入順序的衝突, 修復前伺服器無法啟動, 伺服器將關閉", "modloader-loading_mods": "ModLoader: 載入伺服器模組 %s 中...", "modloader-mod_has_no_main_property": "ModLoader: 模組 (%s) 不相容. 缺少一個 'main' 屬性", "modloader-mod_order_error": "ModLoader: order.json 中發現錯誤, 將使用預設載入順序", diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-cn.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-cn.json index d52a0b89..83a99b54 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-cn.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/locales/server/zh-cn.json @@ -205,13 +205,11 @@ "modloader-checking_mod": "正在检查:%s", "modloader-cyclic_dependency": "检测到循环依赖。此错误需要修复。服务器无法启动并将关闭,直到错误修复", "modloader-dependency_container_not_initalized": "已请求所依赖容器,但其尚未初始化", - "modloader-error_parsing_mod_load_order": "分析模组加载顺序时出错", "modloader-incompatibilities_not_string_array": "模组%s package.json属性“incompatibilities”应该是字符串数组", "modloader-incompatible_mod_found": "模组 {{author}}-{{name}} 不兼容 {{incompatibleModName}}", "modloader-invalid_sptVersion_field": "模组 %s 在sptVersion字段中包含无效的semver字符串。有效值示例:https://github.com/npm/node-semver#versions", "modloader-is_client_mod": "模组 %s 是一个客户端模组,应该被放置在这个文件夹:/spt/bepinex/plugins", "modloader-is-old-js-mod": "模组 (%s) 是 4.0.0 版本前的服务端模组,请使用对应版本的客户端或等待该模组更新适配。", - "modloader-load_order_conflict": "模组`{{modOneName}} `和`{{modTwoName}} `存在载入顺序冲突,在解决此冲突前服务器将因无法正常启动而关闭", "modloader-loaded_mod": "模组:{{name}} 版本{{version}} 作者:{{author}} 已加载", "modloader-loading_mods": "模组加载器:正在加载%s个客户端模组……", "modloader-main_property_not_js": "模组 %s package.json的main属性必须时一个.js文件", diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/AbstractModMetadata.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/AbstractModMetadata.cs index 06a3c3ac..a8e9bd70 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/AbstractModMetadata.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/AbstractModMetadata.cs @@ -30,7 +30,7 @@ public abstract record AbstractModMetadata /// /// People who have contributed to this mod /// - public abstract List? Contributors { get; set; } + public abstract List? Contributors { get; init; } /// /// Semantic version of this mod, this uses the semver standard: https://semver.org/ @@ -39,7 +39,7 @@ public abstract record AbstractModMetadata ///
/// Version = new Version("1.0.0.0"); is not ///
- public abstract Version Version { get; } + public abstract Version Version { get; init; } /// /// SPT version this mod was built for, this uses the semver standard: https://semver.org/ @@ -48,39 +48,29 @@ public abstract record AbstractModMetadata ///
/// Version = new Version("4.0.0.0"); is not ///
- public abstract Version SptVersion { get; } - - /// - /// List of mods this mod should load before - /// - public abstract List? LoadBefore { get; set; } - - /// - /// List of mods this mod should load after - /// - public abstract List? LoadAfter { get; set; } + public abstract Version SptVersion { get; init; } /// /// List of mods not compatible with this mod /// - public abstract List? Incompatibilities { get; set; } + public abstract List? Incompatibilities { get; init; } /// /// Dictionary of mods this mod depends on. /// /// Mod dependency is the key, version is the value /// - public abstract Dictionary? ModDependencies { get; set; } + public abstract Dictionary? ModDependencies { get; init; } /// /// Link to this mod's mod page, or GitHub page /// - public abstract string? Url { get; set; } + public abstract string? Url { get; init; } /// /// Does this mod load bundles /// - public abstract bool? IsBundleMod { get; set; } + public abstract bool? IsBundleMod { get; init; } /// /// Name of the license this mod uses diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModOrder.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModOrder.cs deleted file mode 100644 index e8ae10c8..00000000 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModOrder.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Text.Json.Serialization; - -namespace SPTarkov.Server.Core.Models.Spt.Mod; - -public class ModOrder -{ - [JsonPropertyName("order")] - public List Order { get; set; } -} diff --git a/SPTarkov.Server/Modding/ModLoadOrder.cs b/SPTarkov.Server/Modding/ModLoadOrder.cs deleted file mode 100644 index 2f9bb16d..00000000 --- a/SPTarkov.Server/Modding/ModLoadOrder.cs +++ /dev/null @@ -1,124 +0,0 @@ -using SPTarkov.Server.Core.Models.Spt.Mod; -using SPTarkov.Server.Core.Utils.Cloners; - -namespace SPTarkov.Server.Modding; - -public class ModLoadOrder(ICloner cloner) -{ - protected readonly Dictionary LoadOrder = new(); - protected Dictionary Mods = new(); - protected Dictionary ModsAvailable = new(); - - public Dictionary SetModList(Dictionary mods) - { - this.Mods = mods; - ModsAvailable = cloner.Clone(this.Mods); - LoadOrder.Clear(); - - var visited = new HashSet(); - - // invert loadBefore into loadAfter on specified mods - foreach (var (modGuid, modConfig) in ModsAvailable) - { - if ((modConfig.LoadBefore ?? []).Count > 0) - { - InvertLoadBefore(modGuid); - } - } - - foreach (var modGuid in ModsAvailable.Keys) - { - GetLoadOrderRecursive(modGuid, visited); - } - - return LoadOrder; - } - - public List GetLoadOrder() - { - return [.. LoadOrder.Keys]; - } - - public HashSet GetModsOnLoadBefore(string modGuid) - { - if (!Mods.TryGetValue(modGuid, out var config)) - { - throw new Exception($"The mod: {modGuid} does not exist!"); - } - - var loadBefore = new HashSet(config.LoadBefore); - foreach (var loadBeforeModGuid in loadBefore) - { - if (!Mods.ContainsKey(loadBeforeModGuid)) - { - loadBefore.Remove(loadBeforeModGuid); - } - } - - return loadBefore; - } - - protected void InvertLoadBefore(string modGuid) - { - var loadBefore = GetModsOnLoadBefore(modGuid); - - foreach (var loadBeforeMod in loadBefore) - { - var loadBeforeModConfig = ModsAvailable[loadBeforeMod]; - - loadBeforeModConfig.LoadAfter ??= []; - loadBeforeModConfig.LoadAfter.Add(modGuid); - - ModsAvailable.Add(loadBeforeMod, loadBeforeModConfig); - } - } - - protected void GetLoadOrderRecursive(string modGuid, HashSet visited) - { - // Validate package - if (LoadOrder.ContainsKey(modGuid)) - { - return; - } - - if (visited.Contains(modGuid)) - { - // Additional info to help debug - throw new Exception($"Cyclic dependency detected for mod: {modGuid}!"); - } - - // Check dependencies - if (!ModsAvailable.TryGetValue(modGuid, out var config)) - { - throw new Exception("modloader-error_parsing_mod_load_order"); - } - - config.LoadAfter ??= []; - config.ModDependencies ??= []; - - var dependencies = new HashSet(config.ModDependencies.Keys); - - foreach (var modAfterGuid in config.LoadAfter) - { - if (ModsAvailable.TryGetValue(modAfterGuid, out var value)) - { - if (value?.LoadAfter?.Contains(modGuid) ?? false) - { - throw new Exception("modloader-load_order_conflict"); - } - - dependencies.Add(modAfterGuid); - } - } - - visited.Add(modGuid); - - foreach (var nextModGuid in dependencies) - { - GetLoadOrderRecursive(nextModGuid, visited); - } - - visited.Remove(modGuid); - LoadOrder.Add(modGuid, config); - } -} diff --git a/SPTarkov.Server/Modding/ModValidator.cs b/SPTarkov.Server/Modding/ModValidator.cs index 3e300b48..0e57b3ab 100644 --- a/SPTarkov.Server/Modding/ModValidator.cs +++ b/SPTarkov.Server/Modding/ModValidator.cs @@ -7,81 +7,20 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel; namespace SPTarkov.Server.Modding; -public class ModValidator( - ISptLogger logger, - ServerLocalisationService localisationService, - ISemVer semVer, - ModLoadOrder modLoadOrder, - JsonUtil jsonUtil, - FileUtil fileUtil -) +public class ModValidator(ISptLogger logger, ServerLocalisationService localisationService, ISemVer semVer, FileUtil fileUtil) { - protected const string BasePath = "user/mods/"; - protected const string ModOrderPath = "user/mods/order.json"; protected readonly Dictionary Imported = []; - protected readonly Dictionary Order = []; protected readonly HashSet SkippedMods = []; - public List ValidateAndSort(IEnumerable mods) + public List ValidateMods(IEnumerable mods) { - if (ProgramStatics.MODS()) + if (!ProgramStatics.MODS()) { - ValidateMods(mods); - - var sortedModLoadOrder = modLoadOrder.SetModList( - Imported.ToDictionary(m => m.Value.ModMetadata.ModGuid, m => m.Value.ModMetadata) - ); - var finalList = new List(); - foreach (var orderMod in SortModsLoadOrder()) - { - if (!Imported.TryGetValue(orderMod, out var loadedMod)) - { - throw new Exception($"Unable to find mod {orderMod} in loaded mods"); - } - - finalList.Add(loadedMod); - } - - return finalList; + return []; } - return []; - } - - public string GetModPath(string mod) - { - return $"{BasePath}{mod}/"; - } - - protected void ValidateMods(IEnumerable mods) - { logger.Info(localisationService.GetText("modloader-loading_mods", mods.Count())); - // Mod order - if (!fileUtil.FileExists(ModOrderPath)) - { - logger.Info(localisationService.GetText("modloader-mod_order_missing")); - - // Write file with empty order array to disk - fileUtil.WriteFile(ModOrderPath, jsonUtil.Serialize(new ModOrder { Order = [] })); - } - else - { - var modOrder = File.ReadAllText(ModOrderPath); - try - { - var modOrderArray = jsonUtil.Deserialize(modOrder).Order; - for (var i = 0; i < modOrderArray.Count; i++) - { - Order.Add(modOrderArray[i], i); - } - } - catch (Exception e) - { - logger.Error(localisationService.GetText("modloader-mod_order_error"), e); - } - } - // Validate and remove broken mods from mod list var validMods = GetValidMods(mods).ToList(); // ToList now so we can .Sort later @@ -123,20 +62,7 @@ public class ModValidator( if (errorsFound) { logger.Error(localisationService.GetText("modloader-no_mods_loaded")); - return; - } - - // sort mod order - var missingFromOrderJSON = new Dictionary(); - validMods.Sort((prev, next) => SortMods(prev, next, missingFromOrderJSON)); - - // log the missing mods from order.json - if (logger.IsLogEnabled(LogLevel.Debug)) - { - foreach (var missingMod in missingFromOrderJSON.Keys) - { - logger.Debug(localisationService.GetText("modloader-mod_order_missing_from_json", missingMod)); - } + return []; } // Add mods @@ -150,24 +76,8 @@ public class ModValidator( AddMod(mod); } - } - protected int SortMods(SptMod prev, SptMod next, Dictionary missingFromOrderJson) - { - // mod is not on the list, move the mod to last - if (!Order.TryGetValue(prev.ModMetadata!.Name!, out var previndex)) - { - missingFromOrderJson[prev.ModMetadata.Name!] = true; - return 1; - } - - if (!Order.TryGetValue(next.ModMetadata!.Name!, out var nextindex)) - { - missingFromOrderJson[next.ModMetadata.Name!] = true; - return -1; - } - - return previndex - nextindex; + return Imported.Select(mod => mod.Value).ToList(); } /// @@ -245,22 +155,6 @@ public class ModValidator( return true; } - /// - /// Read loadorder.json (create if doesn't exist) and return sorted list of mods - /// - /// string array of sorted mod names - public List SortModsLoadOrder() - { - // if loadorder.json exists: load it, otherwise generate load order - var loadOrderPath = $"{BasePath}loadorder.json"; - if (fileUtil.FileExists(loadOrderPath)) - { - return jsonUtil.Deserialize>(fileUtil.ReadFile(loadOrderPath)); - } - - return modLoadOrder.GetLoadOrder(); - } - /// /// Compile mod and add into class property "imported" /// @@ -299,6 +193,12 @@ public class ModValidator( return true; } + // Mod depends on itself, throw a warning but continue anyway. + if (pkg.ModDependencies.ContainsKey(pkg.ModGuid)) + { + logger.Warning(localisationService.GetText("modloader-self_dependency", new { mod = pkg.Name })); + } + // used for logging, dont remove var modName = $"{pkg.Author}-{pkg.Name}"; @@ -339,6 +239,12 @@ public class ModValidator( return true; } + // Mod is marked as incompatible with itself, throw a warning but continue anyway + if (modToCheck.Incompatibilities.Contains(modToCheck.ModGuid)) + { + logger.Warning(localisationService.GetText("modloader-self_incompatibility", new { mod = modToCheck.Name })); + } + foreach (var incompatibleModGuid in modToCheck.Incompatibilities) { // Raise dependency version incompatible if any incompatible mod is found @@ -371,7 +277,6 @@ public class ModValidator( protected bool ValidMod(SptMod mod) { var modName = mod.ModMetadata.Name; - var modPath = GetModPath(modName); var modIsCalledBepinEx = string.Equals(modName, "bepinex", StringComparison.OrdinalIgnoreCase); var modIsCalledUser = string.Equals(modName, "user", StringComparison.OrdinalIgnoreCase); diff --git a/SPTarkov.Server/Program.cs b/SPTarkov.Server/Program.cs index 1b424cef..d16fb171 100644 --- a/SPTarkov.Server/Program.cs +++ b/SPTarkov.Server/Program.cs @@ -53,12 +53,12 @@ public static class Program // Search for mod dlls loadedMods = ModDllLoader.LoadAllMods(); // validate and sort mods, this will also discard any mods that are invalid - var sortedLoadedMods = ValidateMods(loadedMods); + var validatedLoadedMods = ValidateMods(loadedMods); - // update the loadedMods list with our validated sorted mods - loadedMods = sortedLoadedMods; + // update the loadedMods list with our validated mods + loadedMods = validatedLoadedMods; - diHandler.AddInjectableTypesFromAssemblies(sortedLoadedMods.SelectMany(a => a.Assemblies)); + diHandler.AddInjectableTypesFromAssemblies(validatedLoadedMods.SelectMany(a => a.Assemblies)); } diHandler.InjectAll(); @@ -187,10 +187,9 @@ public static class Program .Services.AddScoped(typeof(ISptLogger), typeof(SptLogger)) .AddScoped(typeof(ISemVer), typeof(SemanticVersioningSemVer)) .AddSingleton() - .AddSingleton() .BuildServiceProvider(); var modValidator = provider.GetRequiredService(); - return modValidator.ValidateAndSort(mods); + return modValidator.ValidateMods(mods); } private static void SetConsoleOutputMode() diff --git a/Testing/TestMod/TestMod.cs b/Testing/TestMod/TestMod.cs index 3828cc19..ef600a54 100644 --- a/Testing/TestMod/TestMod.cs +++ b/Testing/TestMod/TestMod.cs @@ -11,16 +11,14 @@ public record TestModMetadata : AbstractModMetadata public override string ModGuid { get; init; } = "com.sp-tarkov.test-mod"; public override string Name { get; init; } = "test-mod"; public override string Author { get; init; } = "SPTarkov"; - public override List? Contributors { get; set; } - public override Version Version { get; } = new("1.0.0"); - public override Version SptVersion { get; } = new("4.0.0"); - public override List? LoadBefore { get; set; } - public override List? LoadAfter { get; set; } - public override List? Incompatibilities { get; set; } - public override Dictionary? ModDependencies { get; set; } - public override string? Url { get; set; } - public override bool? IsBundleMod { get; set; } - public override string? License { get; init; } = "MIT"; + public override List? Contributors { get; init; } + public override Version Version { get; init; } = new("1.0.0"); + public override Version SptVersion { get; init; } = new("4.0.0"); + public override List? Incompatibilities { get; init; } + public override Dictionary? ModDependencies { get; init; } + public override string? Url { get; init; } + public override bool? IsBundleMod { get; init; } + public override string License { get; init; } = "MIT"; } [Injectable(TypePriority = OnLoadOrder.PostDBModLoader + 1)]