update to game version 131.10.2

This commit is contained in:
Mikhail Tyukin
2025-03-27 15:52:17 -04:00
parent d67a7d64cd
commit 3d3c32007c
7 changed files with 17738 additions and 7183 deletions

View File

@@ -22,7 +22,9 @@ namespace EpinelPS.LobbyServer.Archive
// Get entries with record_type "EventQuest"
var eventQuestRecords = GameData.Instance.archiveRecordManagerTable.Values.Where(record => record.record_type == "EventQuest").ToList();
response.UnlockedArchiveEventQuestList.AddRange(eventQuestRecords.Select(record => record.id));
response.ArchiveEventQuest = new();
response.ArchiveEventQuest.UnlockedArchiveRecordManagerEventQuestIdList.AddRange(eventQuestRecords.Select(record => record.id));
// TODO more fields
// TODO: allow unlocking

View File

@@ -9,9 +9,11 @@ namespace EpinelPS.LobbyServer.Intercept
{
var req = await ReadData<ReqInterceptAnomalousData>();
// TODO
var response = new ResInterceptAnomalousData
{
LastEnteredInterceptAnomalousId = 1,
InterceptAnomalousManagerId = 1,
RemainingTickets = 5
};
response.ClearedInterceptAnomalousIds.Add(new[] { 1, 2, 3, 4, 5 });

View File

@@ -20,8 +20,7 @@ namespace EpinelPS.LobbyServer.Outpost
var response = new ResGetOutpostData
{
OutpostBattleLevel = user.OutpostBattleLevel,
JukeboxV2 = new NetUserJukeboxDataV2() { CommandBgm = new() { Type = NetJukeboxBgmType.NetJukeboxBgmTypeJukeboxTableId, JukeboxTableId = user.CommanderMusic.TableId } },
SkinGroupId = 1000,
JukeboxV2 = new NetUserJukeboxDataV2() { CommandBgm = new() { Type = NetJukeboxBgmType.NetJukeboxBgmTypeJukeboxTableId, JukeboxTableId = user.CommanderMusic.TableId } }
};
// TODO: do not hard code this!

File diff suppressed because one or more lines are too long

View File

@@ -1,17 +1,17 @@
{
// Asset Urls for game version 130.8.13
// Asset Urls for game version 131.10.2
// Extracted from POST https://global-lobby.nikke-kr.com/v1/staticdatapack
"StaticData": {
"Url": "https://cloud.nikke-kr.com/prdenv/130-cbc9c4dbef/staticdata/data/qa-250220-02b/377239/StaticData.pack",
"Version": "data/qa-250220-02b/377239",
"Salt1": "unAxbbovjkWyPVwkpT9+EqCT4lYyNk2A0p2HY8S8Yvs=",
"Salt2": "WRXNjLzPx6cbaR01pg7u0hT1ODIFxki9U1e+Um64jXI="
"Url": "https://cloud.nikke-kr.com/prdenv/131-c60e0497e5/staticdata/data/qa-250327-03b/386618/StaticData.pack",
"Version": "data/qa-250327-03b/386618",
"Salt1": "zgnwS/ZrGQdzgm8SHLKRJ7JPr3zwxoAWQXNGLzZaQLA=",
"Salt2": "wWKFI3Cl6LXOJRrkbN++t5N89VUw9B0yfGMiQ3n+OrE="
},
// Extracted from POST https://global-lobby.nikke-kr.com/v1/resourcehosts2
"ResourceBaseURL": "https://cloud.nikke-kr.com/prdenv/130-b1a6546083/{Platform}",
"ResourceBaseURL": "https://cloud.nikke-kr.com/prdenv/131-b2562bc684/{Platform}",
// Extracted from route config
"GameMinVer": "130.8.12",
"GameMaxVer": "130.8.13"
"GameMinVer": "131.10.1",
"GameMaxVer": "131.10.2"
}

View File

@@ -6,18 +6,18 @@
"version_info": {
"game_id": "16601",
"branch_id": "1",
"version_id": "0.0.0.47",
"version_name": "NIKKE.PC_Offcial_GL_130.8.13",
"version_id": "0.0.0.48",
"version_name": "NIKKE.PC_Offcial_GL_131.10.2",
"version_status": 7,
"service_status": 0,
"build_id": "2979",
"cos_repo_files": "[{\"cdn_root\":\"https://cloud.nikke-kr.com/PC/prod/rid.48-r.02587\",\"chunk_encrypt_flag\":0,\"manifest_files\":[{\"chunks\":[{\"chunk_index\":0,\"chunk_md5\":\"e87dda54cde9b233d4287c04444adcb5\",\"chunk_size\":112048,\"chunk_uncompress_md5\":\"e87dda54cde9b233d4287c04444adcb5\",\"chunk_uncompress_size\":112048}],\"file_url\":\"/manifestv2/48_5937488248518548732_0.manifest\",\"manifest_md5\":\"e87dda54cde9b233d4287c04444adcb5\",\"manifest_size\":112048}],\"manifest_flag\":13,\"manifest_id\":5937488248518548000,\"manifest_version\":2,\"patch_size\":97363078,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":48,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":350451607,\"repository_type\":\"Game\",\"repository_uncompress_size\":830542676}]",
"cos_access_info": "[{\"repository_id\":48,\"repository_type\":\"Game\",\"repository_name\":\"Game\",\"repository_name_en\":\"Game\",\"description\":\"game repo\",\"cos_list\":[{\"public_cdn_domain\":\"https://cloud.nikke-kr.com\"}],\"encrytion_key\":\"158f36bf7e611c945320c399294c4a6d\",\"encrytion_algorithm_id\":6,\"manifest_encrytion_key\":\"0f448b096bb4dc5b339debdce77c4572\",\"manifest_encrytion_algorithm_id\":6,\"game_id\":16601,\"manifest_id\":5937488248518548736}]",
"key_file_info": "[{\"crc\":3525221399,\"path\":\"NIKKE\\\\game\\\\nikke.exe\"}]",
"build_id": "2988",
"cos_repo_files": "[{\"cdn_root\":\"https://cloud.nikke-kr.com/PC/prod/rid.48-r.02587\",\"chunk_encrypt_flag\":0,\"manifest_files\":[{\"chunks\":[{\"chunk_index\":0,\"chunk_md5\":\"7d23c335f505f853147d51f1734a4304\",\"chunk_size\":112096,\"chunk_uncompress_md5\":\"7d23c335f505f853147d51f1734a4304\",\"chunk_uncompress_size\":112096}],\"file_url\":\"/manifestv2/48_5937488248518554894_0.manifest\",\"manifest_md5\":\"7d23c335f505f853147d51f1734a4304\",\"manifest_size\":112096}],\"manifest_flag\":13,\"manifest_id\":5937488248518555000,\"manifest_version\":2,\"patch_size\":113181731,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":48,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":352732338,\"repository_type\":\"Game\",\"repository_uncompress_size\":834493367}]",
"cos_access_info": "[{\"repository_id\":48,\"repository_type\":\"Game\",\"repository_name\":\"Game\",\"repository_name_en\":\"Game\",\"description\":\"game repo\",\"cos_list\":[{\"public_cdn_domain\":\"https://cloud.nikke-kr.com\"}],\"encrytion_key\":\"158f36bf7e611c945320c399294c4a6d\",\"encrytion_algorithm_id\":6,\"manifest_encrytion_key\":\"0f448b096bb4dc5b339debdce77c4572\",\"manifest_encrytion_algorithm_id\":6,\"game_id\":16601,\"manifest_id\":5937488248518555506}]",
"key_file_info": "[{\"crc\":1906233735,\"path\":\"NIKKE\\\\game\\\\nikke.exe\"}]",
"install_script": "{\"script_content\":{\"executable\":[]}}",
"installer_size": "350451607",
"installed_size": "830542676",
"publish_time_in_unix": "1739984354",
"installer_size": "352732338",
"installed_size": "834493367",
"publish_time_in_unix": "1743043298",
"is_first_version_in_branch": "1",
"version_description": "[{\"lang_code\":\"en\",\"text\":\"\"},{\"lang_code\":\"ja\",\"text\":\"\"},{\"lang_code\":\"ko\",\"text\":\"\"}]",
"update_type": 0
@@ -26,18 +26,18 @@
"launcher_version_info": {
"game_id": "16701",
"branch_id": "1",
"version_id": "0.0.6.417",
"version_name": "nikke_launcher_0.0.6.417",
"version_id": "0.0.6.423",
"version_name": "nikke_launcher_0.0.6.423",
"version_status": 7,
"service_status": 0,
"build_id": "2931",
"cos_repo_files": "[{\"cdn_root\":\"https://cloud.nikke-kr.com/PC/prod/rid.50-r.971a3\",\"chunk_encrypt_flag\":0,\"manifest_files\":[{\"chunks\":[{\"chunk_index\":0,\"chunk_md5\":\"c694e5ad69053582684dc104265121cb\",\"chunk_size\":51816,\"chunk_uncompress_md5\":\"c694e5ad69053582684dc104265121cb\",\"chunk_uncompress_size\":51816}],\"file_url\":\"/manifestv2/50_5937488248518539245_0.manifest\",\"manifest_md5\":\"c694e5ad69053582684dc104265121cb\",\"manifest_size\":51816}],\"manifest_flag\":13,\"manifest_id\":5937488248518539000,\"manifest_version\":2,\"patch_size\":15659527,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":50,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":149482017,\"repository_type\":\"Game\",\"repository_uncompress_size\":389997017}]",
"cos_access_info": "[{\"repository_id\":50,\"repository_type\":\"Game\",\"repository_name\":\"Game\",\"repository_name_en\":\"Game\",\"description\":\"game repo\",\"cos_list\":[{\"public_cdn_domain\":\"https://cloud.nikke-kr.com\"}],\"encrytion_key\":\"ab00cbd5b9e6f7c4759c12d489b34b61\",\"encrytion_algorithm_id\":10,\"manifest_encrytion_key\":\"f8c65f692a6a021a688507a6e441786a\",\"manifest_encrytion_algorithm_id\":6,\"game_id\":16701,\"manifest_id\":5937488248518539459}]",
"key_file_info": "[{\"crc\":1428240213,\"path\":\"nikke_launcher.exe\"}]",
"build_id": "2984",
"cos_repo_files": "[{\"cdn_root\":\"https://cloud.nikke-kr.com/PC/prod/rid.50-r.971a3\",\"chunk_encrypt_flag\":0,\"manifest_files\":[{\"chunks\":[{\"chunk_index\":0,\"chunk_md5\":\"4dbb2ac02c6362bbdbae55f9b9111bd9\",\"chunk_size\":51808,\"chunk_uncompress_md5\":\"4dbb2ac02c6362bbdbae55f9b9111bd9\",\"chunk_uncompress_size\":51808}],\"file_url\":\"/manifestv2/50_5937488248518551348_0.manifest\",\"manifest_md5\":\"4dbb2ac02c6362bbdbae55f9b9111bd9\",\"manifest_size\":51808}],\"manifest_flag\":13,\"manifest_id\":5937488248518552000,\"manifest_version\":2,\"patch_size\":12970500,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":50,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":149486766,\"repository_type\":\"Game\",\"repository_uncompress_size\":389999891}]",
"cos_access_info": "[{\"repository_id\":50,\"repository_type\":\"Game\",\"repository_name\":\"Game\",\"repository_name_en\":\"Game\",\"description\":\"game repo\",\"cos_list\":[{\"public_cdn_domain\":\"https://cloud.nikke-kr.com\"}],\"encrytion_key\":\"ab00cbd5b9e6f7c4759c12d489b34b61\",\"encrytion_algorithm_id\":10,\"manifest_encrytion_key\":\"f8c65f692a6a021a688507a6e441786a\",\"manifest_encrytion_algorithm_id\":6,\"game_id\":16701,\"manifest_id\":5937488248518551350}]",
"key_file_info": "[{\"crc\":931011831,\"path\":\"nikke_launcher.exe\"}]",
"install_script": "{\"script_content\":{\"executable\":[]}}",
"installer_size": "149482017",
"installed_size": "389997017",
"publish_time_in_unix": "1733365591",
"installer_size": "149486766",
"installed_size": "389999891",
"publish_time_in_unix": "1741833229",
"is_first_version_in_branch": "1",
"version_description": "[{\"lang_code\":\"en\",\"text\":\"\"},{\"lang_code\":\"ja\",\"text\":\"\"},{\"lang_code\":\"id\",\"text\":\"\"},{\"lang_code\":\"th\",\"text\":\"\"},{\"lang_code\":\"pt\",\"text\":\"\"},{\"lang_code\":\"es\",\"text\":\"\"},{\"lang_code\":\"de\",\"text\":\"\"},{\"lang_code\":\"fr\",\"text\":\"\"},{\"lang_code\":\"zh-Hans\",\"text\":\"\"},{\"lang_code\":\"zh-Hant\",\"text\":\"\"}]",
"update_type": 2

View File

@@ -7,8 +7,8 @@ namespace ServerSelector
{
public class ServerSwitcher
{
private static int GameAssemblySodiumIntegrityFuncHint = 0x5F17AF0;
public static string PatchGameVersion = "130.8.13";
private static int GameAssemblySodiumIntegrityFuncHint = 0x6014080;
public static string PatchGameVersion = "131.10.2";
private static byte[] GameAssemblySodiumIntegrityFuncOrg = [0x40, 0x53, 0x56, 0x57, 0x41];
private static byte[] GameAssemblySodiumIntegrityFuncPatch = [0xb0, 0x01, 0xc3, 0x90, 0x90];
@@ -60,26 +60,30 @@ namespace ServerSelector
hostsFilePath = gamePath + "/../../../windows/system32/drivers/etc/hosts";
}
var CAcert = await File.ReadAllTextAsync(AppDomain.CurrentDomain.BaseDirectory + "myCA.pem");
string launcherCertList = launcherPath + "/intl_service/cacert.pem";
string gameCertList = gamePath + "/nikke_Data/Plugins/x86_64/cacert.pem";
var certList1 = await File.ReadAllTextAsync(launcherCertList);
if (File.Exists(launcherCertList))
{
var certList1 = await File.ReadAllTextAsync(launcherCertList);
int goodSslIndex1 = certList1.IndexOf("Good SSL Ca");
if (goodSslIndex1 == -1)
return "Patch missing";
int goodSslIndex1 = certList1.IndexOf("Good SSL Ca");
if (goodSslIndex1 == -1)
return "Patch missing";
}
var certList2 = await File.ReadAllTextAsync(gameCertList);
int goodSslIndex2 = certList2.IndexOf("Good SSL Ca");
if (goodSslIndex2 == -1)
return "Patch missing";
if (File.Exists(gameCertList))
{
var certList2 = await File.ReadAllTextAsync(gameCertList);
int goodSslIndex2 = certList2.IndexOf("Good SSL Ca");
if (goodSslIndex2 == -1)
return "Patch missing";
}
// TODO: Check sodium lib
// TODO: Check if gameassembly was patched
// TODO: check hosts file
return "OK";
}
@@ -210,17 +214,23 @@ namespace ServerSelector
supported = false;
}
var certList1 = await File.ReadAllTextAsync(launcherCertList);
if (File.Exists(launcherCertList))
{
var certList1 = await File.ReadAllTextAsync(launcherCertList);
int goodSslIndex1 = certList1.IndexOf("Good SSL Ca");
if (goodSslIndex1 != -1)
await File.WriteAllTextAsync(launcherCertList, certList1.Substring(0, goodSslIndex1));
int goodSslIndex1 = certList1.IndexOf("Good SSL Ca");
if (goodSslIndex1 != -1)
await File.WriteAllTextAsync(launcherCertList, certList1.Substring(0, goodSslIndex1));
}
var certList2 = await File.ReadAllTextAsync(gameCertList);
if (File.Exists(gameCertList))
{
var certList2 = await File.ReadAllTextAsync(gameCertList);
int goodSslIndex2 = certList2.IndexOf("Good SSL Ca");
if (goodSslIndex2 != -1)
await File.WriteAllTextAsync(gameCertList, certList2.Substring(0, goodSslIndex2));
int goodSslIndex2 = certList2.IndexOf("Good SSL Ca");
if (goodSslIndex2 != -1)
await File.WriteAllTextAsync(gameCertList, certList2.Substring(0, goodSslIndex2));
}
}
else
{
@@ -274,7 +284,7 @@ namespace ServerSelector
// trust CA
if (OperatingSystem.IsWindows())
{
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
X509Store store = new(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(new X509Certificate2(X509Certificate2.CreateFromCertFile(AppDomain.CurrentDomain.BaseDirectory + "myCA.pfx")));
store.Close();