Change to using builtin SemVer type for AbstractModMetadata and ProgramStatistics.Generated (#536)

* Change to using SemVer builtin type

* Remove SptVersion from config, remove redundant .ToString()

* Update test mod, fix watermark string conversion
This commit is contained in:
Cj
2025-08-09 16:40:25 -04:00
committed by GitHub
parent c16c988fda
commit 4d0eb4d4f3
35 changed files with 85 additions and 108 deletions
+11 -9
View File
@@ -1,13 +1,15 @@
namespace SPTarkov.Common.Semver;
using Version = SemanticVersioning.Version;
namespace SPTarkov.Common.Semver;
public interface ISemVer
{
string MaxSatisfying(List<string> versions);
string MaxSatisfying(IEnumerable<string> versions);
string MaxSatisfying(string version, List<string> versions);
string MaxSatisfying(string version, IEnumerable<string> versions);
bool Satisfies(string version, string testVersion);
bool AnySatisfies(string version, List<string> testVersions);
bool IsValid(string version);
bool IsValidRange(string version);
string MaxSatisfying(List<Version> versions);
string MaxSatisfying(IEnumerable<Version> versions);
string MaxSatisfying(string version, List<Version> versions);
string MaxSatisfying(string version, IEnumerable<Version> versions);
bool Satisfies(Version version, Version testVersion);
bool AnySatisfies(Version version, List<Version> testVersions);
bool IsValid(Version version);
bool IsValidRange(Version version);
}
@@ -5,43 +5,44 @@ namespace SPTarkov.Common.Semver.Implementations;
public class SemanticVersioningSemVer : ISemVer
{
public string MaxSatisfying(List<string> versions)
public string MaxSatisfying(List<Version> versions)
{
return MaxSatisfying(versions.AsEnumerable());
}
public string MaxSatisfying(IEnumerable<string> versions)
public string MaxSatisfying(IEnumerable<Version> versions)
{
return MaxSatisfying("*", versions);
}
public string MaxSatisfying(string version, List<string> versions)
public string MaxSatisfying(string version, List<Version> versions)
{
return MaxSatisfying(version, versions.AsEnumerable());
}
public string MaxSatisfying(string version, IEnumerable<string> versions)
public string MaxSatisfying(string version, IEnumerable<Version> versions)
{
return Range.MaxSatisfying(version, versions, true);
var versionRanges = versions.Select(versionInner => versionInner.ToString());
return Range.MaxSatisfying(version, versionRanges, true);
}
public bool Satisfies(string version, string testVersion)
public bool Satisfies(Version version, Version testVersion)
{
return Range.IsSatisfied(testVersion, version, true);
return Range.IsSatisfied(testVersion.ToString(), version.ToString(), true);
}
public bool AnySatisfies(string version, List<string> testVersions)
public bool AnySatisfies(Version version, List<Version> testVersions)
{
return testVersions.Any(v => Satisfies(version, v));
}
public bool IsValid(string version)
public bool IsValid(Version version)
{
return Version.TryParse(version, out _);
return Version.TryParse(version.ToString(), out _);
}
public bool IsValidRange(string version)
public bool IsValidRange(Version version)
{
return Range.TryParse(version, out _);
return Range.TryParse(version.ToString(), out _);
}
}
@@ -1,5 +1,4 @@
{
"sptVersion": "4.0.0",
"projectName": "SPT",
"compatibleTarkovVersion": "0.16.0.38114",
"serverName": "SPT Server",
@@ -133,7 +133,6 @@
"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-invalid_version_property": "ملف package.json للمود %s يحتوي على سلسلة إصدار غير صالحة.\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}} تم تحميلها",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Mód %s package.json obsahuje neplatnou verzi řetězce",
"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",
@@ -201,7 +201,6 @@
"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-invalid_version_property": "Mod %s package.json enthält eine ungültige Versionszeichenfolge",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Το πρόσθετο %s package.json περιέχει μια μη έγκυρη έκδοση συμβολοσειράς",
"modloader-is_client_mod": "Το πρόσθετο (%s) είναι ένα πρόσθετο πελάτη και θα πρέπει να τοποθετηθεί στον ακόλουθο φάκελο: /spt/bepinex/plugins",
"modloader-is-old-js-mod": "Το Mod (%s) είναι μια λειτουργία διακομιστή προ της έκδοσης 4.0.0. Παρακαλώ βρείτε την κατάλληλη έκδοση ή περιμένετε για μια ενημέρωση.",
"modloader-load_order_conflict": "Τα `{{modOneName}}` και `{{modTwoName}}` έχουν αντικρουόμενες απαιτήσεις σειράς φόρτωσης, ο διακομιστής δεν μπορεί να ξεκινήσει μέχρι να αυτό διορθωθεί και θα τερματιστεί",
@@ -209,7 +209,6 @@
"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-invalid_version_property": "Mod: %s package.json contains an invalid version string",
"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",
@@ -202,7 +202,6 @@
"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-invalid_version_property": "La modificacion %s package.json contiene un valor invalido de version",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Le mod %s package.json contient une chaîne de version invalide",
"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",
@@ -174,7 +174,6 @@
"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-invalid_version_property": "A(z) %s mod package.json fájlja érvénytelen verziójú karakterláncot tartalmaz",
"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",
@@ -183,7 +183,6 @@
"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-invalid_version_property": "Mod %s package.json memiliki versi string yang invalid",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Il package.json della Mod %s contiene una stringa 'version' non valida",
"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",
@@ -189,7 +189,6 @@
"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-invalid_version_property": "モッド %s のpackage.jsonにで不正確なバージョン文字列が使用されています。",
"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}}` のロードの順序の条件が競合しています。 これが修正されるまでサーバーを起動できずシャットダウンします",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "모드 %s 의 package.json 은(는) 잘못된 version 문자열을 포함하고 있습니다",
"modloader-is_client_mod": "모드 (%s) 는 클라이언트 모드로 '/spt/bepinex/plugins' 폴더에 위치해야 합니다",
"modloader-is-old-js-mod": "%s 모드는 4.0 이전 버전용 서버모드입니다. 올바른 버전을 찾아 다시 설치하거나 모드가 업데이트 되기를 기다리세요.",
"modloader-load_order_conflict": "`{{modOneName}}` 과 `{{modTwoName}}` 는 요구되는 모드 순서가 서로 충돌됩니다, 이 문제를 해결하기 전까지 서버를 실행할 수 없으며 서버가 종료됩니다",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Mod %s package.json bevat een invalide versie string",
"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",
@@ -129,7 +129,6 @@
"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-invalid_version_property": "Mod %s pakke.json inneholder en ugyldig versjonstreng",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Mod %s package.json zawiera nieprawidłowy string wersji",
"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",
@@ -201,7 +201,6 @@
"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-invalid_version_property": "Mod %s package.json contém uma string de versão inválida",
"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",
@@ -134,7 +134,6 @@
"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-invalid_version_property": "O package.json do Mod %s contém uma string de versão inválida",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "В моде %s package.json содержит недопустимую строку версии",
"modloader-is_client_mod": "Мод (%s) является модом для клиента и должен находиться в следующей папке: /spt/bepinex/plugins",
"modloader-is-old-js-mod": "Мод (%s) - это серверный мод, выпущенный до версии 4.0.0. Пожалуйста, найдите подходящую версию или дождитесь обновления.",
"modloader-load_order_conflict": "`{{modOneName}}` и `{{modTwoName}}` имеют конфликтующие требования к порядку загрузки, сервер не запустится и закроется, пока это не будет исправлено",
@@ -141,7 +141,6 @@
"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-invalid_version_property": "Mod %s package.json innehåller en ogiltig versionssträng",
"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",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "Mod %s package.json geçersiz bir sürüm dizesi içeriyor",
"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",
@@ -200,7 +200,6 @@
"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-invalid_version_property": "У моді %s package.json містить неприпустимий рядок версії",
"modloader-is_client_mod": "Мод (%s) є модом для клієнта і повинен знаходитися в такій папці: /spt/bepinex/plugins",
"modloader-load_order_conflict": "`{{modOneName}}` і `{{modTwoName}}` мають конфліктуючи вимоги до порядку завантаження, сервер не запуститься і закриється, поки це не буде виправлено",
"modloader-loaded_mod": "Мод {{name}} версії {{version}} от {{author}} завантажено",
@@ -207,7 +207,6 @@
"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-invalid_version_property": "模组 %s package.json包含无效的版本字符串",
"modloader-is_client_mod": "模组 %s 是一个客户端模组,应该被放置在这个文件夹:/spt/bepinex/plugins",
"modloader-is-old-js-mod": "模组 (%s) 是 4.0.0 版本前的服务端模组,请使用对应版本的客户端或等待该模组更新适配。",
"modloader-load_order_conflict": "模组`{{modOneName}} `和`{{modTwoName}} `存在载入顺序冲突,在解决此冲突前服务器将因无法正常启动而关闭",
@@ -431,7 +431,7 @@ public class GameController(
{
if (
fullProfile.SptData.Mods.Any(m =>
m.Author == mod.ModMetadata.Author && m.Version == mod.ModMetadata.Version && m.Name == mod.ModMetadata.Name
m.Author == mod.ModMetadata.Author && m.Version == mod.ModMetadata.Version.ToString() && m.Name == mod.ModMetadata.Name
)
)
{
@@ -443,7 +443,7 @@ public class GameController(
new ModDetails
{
Author = mod.ModMetadata.Author,
Version = mod.ModMetadata.Version,
Version = mod.ModMetadata.Version.ToString(),
Name = mod.ModMetadata.Name,
Url = mod.ModMetadata.Url,
DateAdded = timeUtil.GetTimeStamp(),
@@ -496,7 +496,7 @@ public class GameController(
if (logger.IsLogEnabled(LogLevel.Debug))
{
logger.Debug($"Profile made with: {fullProfile.SptData?.Version}");
logger.Debug($"Server version: {ProgramStatics.SPT_VERSION() ?? _coreConfig.SptVersion} {ProgramStatics.COMMIT()}");
logger.Debug($"Server version: {ProgramStatics.SPT_VERSION()} {ProgramStatics.COMMIT()}");
logger.Debug($"Debug enabled: {ProgramStatics.DEBUG()}");
logger.Debug($"Mods enabled: {ProgramStatics.MODS()}");
}
@@ -9,9 +9,6 @@ public record CoreConfig : BaseConfig
[JsonPropertyName("kind")]
public override string Kind { get; set; } = "spt-core";
[JsonPropertyName("sptVersion")]
public required string SptVersion { get; set; }
[JsonPropertyName("projectName")]
public required string ProjectName { get; set; }
@@ -1,4 +1,6 @@
namespace SPTarkov.Server.Core.Models.Spt.Mod;
using Version = SemanticVersioning.Version;
namespace SPTarkov.Server.Core.Models.Spt.Mod;
/// <summary>
/// Represents a collection of metadata used to determine things such as author, version,
@@ -31,14 +33,22 @@ public abstract record AbstractModMetadata
public abstract List<string>? Contributors { get; set; }
/// <summary>
/// Semantic version of this mod, this uses the semver standard
/// Semantic version of this mod, this uses the semver standard: https://semver.org/
/// <br/><br/>
/// Version = new Version("1.0.0"); is valid
/// <br/>
/// Version = new Version("1.0.0.0"); is not
/// </summary>
public abstract string Version { get; init; }
public abstract Version Version { get; }
/// <summary>
/// SPT version this mod was built for
/// SPT version this mod was built for, this uses the semver standard: https://semver.org/
/// <br/><br/>
/// Version = new Version("4.0.0"); is valid
/// <br/>
/// Version = new Version("4.0.0.0"); is not
/// </summary>
public abstract string SptVersion { get; init; }
public abstract Version SptVersion { get; }
/// <summary>
/// List of mods this mod should load before
@@ -60,7 +70,7 @@ public abstract record AbstractModMetadata
///
/// Mod dependency is the key, version is the value
/// </summary>
public abstract Dictionary<string, string>? ModDependencies { get; set; }
public abstract Dictionary<string, Version>? ModDependencies { get; set; }
/// <summary>
/// Link to this mod's mod page, or GitHub page
@@ -44,7 +44,7 @@
<Target Name="GenerateProgramStatics" BeforeTargets="CollectPackageReferences;CoreCompile">
<WriteLinesToFile
File="Utils/ProgramStatics.Generated.cs"
Lines="// &lt;auto-generated /&gt;&#xD;&#xA;// This file is automatically generated. Do not modify manually.&#xD;&#xA;// Any changes made to this file will be overwritten during the build process.&#xD;&#xA;&#xD;&#xA;using SPTarkov.Server.Core.Models.Enums%3B&#xD;&#xA;&#xD;&#xA;namespace SPTarkov.Server.Core.Utils%3B&#xD;&#xA;&#xD;&#xA;public static partial class ProgramStatics&#xD;&#xA;{&#xD;&#xA; private static string SptVersion { get%3B } = &quot;$(SptVersion)&quot;%3B&#xD;&#xA; private static string Commit { get%3B } = &quot;$(SptCommit)&quot;%3B&#xD;&#xA; private static double BuildTime { get%3B } = $(SptBuildTime)%3B&#xD;&#xA; private static EntryType BuildType { get%3B } = EntryType.$(SptBuildType)%3B&#xD;&#xA;}&#xD;&#xA;"
Lines="// &lt;auto-generated /&gt;&#xD;&#xA;// This file is automatically generated. Do not modify manually.&#xD;&#xA;// Any changes made to this file will be overwritten during the build process.&#xD;&#xA;&#xD;&#xA;using SPTarkov.Server.Core.Models.Enums%3B&#xD;&#xA;&#xD;&#xA;using Version = SemanticVersioning.Version%3B&#xD;&#xA;&#xD;&#xA;namespace SPTarkov.Server.Core.Utils%3B&#xD;&#xA;&#xD;&#xA;public static partial class ProgramStatics&#xD;&#xA;{&#xD;&#xA; private static Version SptVersion { get%3B } = new(&quot;$(SptVersion)&quot;)%3B&#xD;&#xA; private static string Commit { get%3B } = &quot;$(SptCommit)&quot;%3B&#xD;&#xA; private static double BuildTime { get%3B } = $(SptBuildTime)%3B&#xD;&#xA; private static EntryType BuildType { get%3B } = EntryType.$(SptBuildType)%3B&#xD;&#xA;}&#xD;&#xA;"
Overwrite="true"
/>
</Target>
+1 -1
View File
@@ -39,7 +39,7 @@ public class App(
_logger.Debug($"Ran as admin: {Environment.IsPrivilegedProcess}");
_logger.Debug($"CPU cores: {Environment.ProcessorCount}");
_logger.Debug($"PATH: {(Environment.ProcessPath ?? "null returned").Encode(EncodeType.BASE64)}");
_logger.Debug($"Server: {ProgramStatics.SPT_VERSION() ?? _coreConfig.SptVersion}");
_logger.Debug($"Server: {ProgramStatics.SPT_VERSION()}");
// _logger.Debug($"RAM: {(os.totalmem() / 1024 / 1024 / 1024).toFixed(2)}GB");
@@ -1,5 +1,6 @@
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Logging;
using Version = SemanticVersioning.Version;
namespace SPTarkov.Server.Core.Utils;
@@ -68,7 +69,7 @@ public static partial class ProgramStatics
return _mods;
}
public static string SPT_VERSION()
public static Version SPT_VERSION()
{
return SptVersion;
}
@@ -12,32 +12,32 @@ namespace SPTarkov.Server.Core.Utils;
public class WatermarkLocale(ServerLocalisationService serverLocalisationService)
{
public IReadOnlyList<string> Description { get; } =
[
serverLocalisationService.GetText("watermark-discord_url"),
"",
serverLocalisationService.GetText("watermark-free_of_charge"),
serverLocalisationService.GetText("watermark-paid_scammed"),
serverLocalisationService.GetText("watermark-commercial_use_prohibited"),
];
[
serverLocalisationService.GetText("watermark-discord_url"),
"",
serverLocalisationService.GetText("watermark-free_of_charge"),
serverLocalisationService.GetText("watermark-paid_scammed"),
serverLocalisationService.GetText("watermark-commercial_use_prohibited"),
];
public IReadOnlyList<string> Modding { get; } =
[
"",
serverLocalisationService.GetText("watermark-modding_disabled"),
"",
serverLocalisationService.GetText("watermark-not_an_issue"),
serverLocalisationService.GetText("watermark-do_not_report"),
];
[
"",
serverLocalisationService.GetText("watermark-modding_disabled"),
"",
serverLocalisationService.GetText("watermark-not_an_issue"),
serverLocalisationService.GetText("watermark-do_not_report"),
];
public IReadOnlyList<string> Warning { get; } =
[
"",
serverLocalisationService.GetText("watermark-testing_build"),
serverLocalisationService.GetText("watermark-no_support"),
"",
$"{serverLocalisationService.GetText("watermark-report_issues_to")}:",
serverLocalisationService.GetText("watermark-issue_tracker_url"),
"",
serverLocalisationService.GetText("watermark-use_at_own_risk"),
];
[
"",
serverLocalisationService.GetText("watermark-testing_build"),
serverLocalisationService.GetText("watermark-no_support"),
"",
$"{serverLocalisationService.GetText("watermark-report_issues_to")}:",
serverLocalisationService.GetText("watermark-issue_tracker_url"),
"",
serverLocalisationService.GetText("watermark-use_at_own_risk"),
];
}
[Injectable(TypePriority = OnLoadOrder.Watermark)]
@@ -93,7 +93,7 @@ public class Watermark(
/// <returns></returns>
public string GetVersionTag(bool withEftVersion = false)
{
var sptVersion = ProgramStatics.SPT_VERSION() ?? sptConfig.SptVersion;
var sptVersion = ProgramStatics.SPT_VERSION().ToString();
var versionTag = ProgramStatics.DEBUG() ? $"{sptVersion} - {serverLocalisationService.GetText("bleeding_edge_build")}" : sptVersion;
if (withEftVersion)