update to 138, use mpk by default

This commit is contained in:
Mikhail Tyukin
2025-09-27 12:35:26 -04:00
parent 71be17a043
commit 04e661b2b7
7 changed files with 57 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
using System.Data; using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Security.Cryptography; using System.Security.Cryptography;
using EpinelPS.Database; using EpinelPS.Database;
@@ -33,7 +33,7 @@ namespace EpinelPS.Data
private int currentFile; private int currentFile;
// TODO: all of the data types need to be changed to match the game // TODO: all of the data types need to be changed to match the game
private bool UseMemoryPack = false; private bool UseMemoryPack = true;
public readonly Dictionary<string, MapInfo> MapData = []; public readonly Dictionary<string, MapInfo> MapData = [];

View File

@@ -1,4 +1,4 @@
using MemoryPack; using MemoryPack;
using System.Data; using System.Data;
using System.Runtime.Serialization; using System.Runtime.Serialization;
@@ -323,10 +323,17 @@ namespace EpinelPS.Data
public partial class OutpostBattleTableRecord public partial class OutpostBattleTableRecord
{ {
public int id; public int id;
public int battle_box_level;
public int main_stage_clear_count;
public int reward_id;
public int credit; public int credit;
public int time_credit;
public int character_exp1; public int character_exp1;
public int character_exp2; public int time_charexp1;
public int user_exp; public int user_exp;
public int time_user_exp;
public int character_exp2;
public int time_charexp2;
} }
[MemoryPackable] [MemoryPackable]
@@ -1175,8 +1182,8 @@ namespace EpinelPS.Data
public EventPlaySodaGameType game_type; public EventPlaySodaGameType game_type;
public int step; public int step;
public int reward_id; public int reward_id;
} }
[MemoryPackable] [MemoryPackable]
public partial class EventMVGQuestRecord_Raw public partial class EventMVGQuestRecord_Raw
{ {
@@ -1269,32 +1276,32 @@ namespace EpinelPS.Data
{ {
Daily, Daily,
Achievement Achievement
} }
public enum EventMVGMIssionSubType public enum EventMVGMIssionSubType
{ {
None, None,
MonsterKill, MonsterKill,
BossMonsterKill, BossMonsterKill,
GetItem, GetItem,
ChapterClear, ChapterClear,
Explorer Explorer
} }
public enum EventMVGMissionConditionType public enum EventMVGMissionConditionType
{ {
KillMonster, KillMonster,
KillBossMonster, KillBossMonster,
GetCurrency, GetCurrency,
GetCollectable, GetCollectable,
None, None,
ClearAchievement, ClearAchievement,
TargetPoint, TargetPoint,
ClearMap, ClearMap,
GetUpgradeMax, GetUpgradeMax,
GetModule, GetModule,
UseKey, UseKey,
GetMemory, GetMemory,
PlayMVG, PlayMVG,
} }
} }

View File

@@ -1,4 +1,4 @@
using EpinelPS.Data; using EpinelPS.Data;
using EpinelPS.Database; using EpinelPS.Database;
using EpinelPS.Utils; using EpinelPS.Utils;

View File

@@ -4,7 +4,7 @@ using Google.Protobuf;
namespace EpinelPS.LobbyServer.Misc namespace EpinelPS.LobbyServer.Misc
{ {
[PacketPath("/get-static-data-pack-info")] [PacketPath("/get-static-data-pack-info-mpk")]
public class GetStaticDataPackNew : LobbyMsgHandler public class GetStaticDataPackNew : LobbyMsgHandler
{ {
protected override async Task HandleAsync() protected override async Task HandleAsync()
@@ -13,14 +13,14 @@ namespace EpinelPS.LobbyServer.Misc
Console.WriteLine("Requesting " + req.Type); Console.WriteLine("Requesting " + req.Type);
StaticData data = req.Type == StaticDataPackType.Mpk ? GameConfig.Root.StaticDataMpk : GameConfig.Root.StaticData; StaticData data = GameConfig.Root.StaticDataMpk;
ResStaticDataPackInfoV2 r = new() ResStaticDataPackInfoV2 r = new()
{ {
Url = data.Url, Url = data.Url,
Version = data.Version, Version = data.Version,
Size = req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkSize : GameData.Instance.Size, Size = GameData.Instance.MpkSize,
Sha256Sum = ByteString.CopyFrom(req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkHash : GameData.Instance.Sha256Hash), Sha256Sum = ByteString.CopyFrom(GameData.Instance.MpkHash),
Salt1 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt1)), Salt1 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt1)),
Salt2 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt2)) Salt2 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt2))
}; };

View File

@@ -403,7 +403,7 @@ namespace EpinelPS.Utils
return new RunCmdResponse() { error = "failed to get real server ip, check internet connection" }; return new RunCmdResponse() { error = "failed to get real server ip, check internet connection" };
// Get latest static data info from server // Get latest static data info from server
ResStaticDataPackInfoV2? staticData = await FetchProtobuf<ResStaticDataPackInfoV2, ReqStaticDataPackInfoV2>(staticDataUrl, new ReqStaticDataPackInfoV2() /*ResStaticDataPackInfoV2? staticData = await FetchProtobuf<ResStaticDataPackInfoV2, ReqStaticDataPackInfoV2>(staticDataUrl, new ReqStaticDataPackInfoV2()
{ {
Type = StaticDataPackType.Json Type = StaticDataPackType.Json
}); });
@@ -411,7 +411,7 @@ namespace EpinelPS.Utils
{ {
Logging.WriteLine("failed to fetch static data", LogType.Error); Logging.WriteLine("failed to fetch static data", LogType.Error);
return new RunCmdResponse() { error = "failed to fetch static data" }; return new RunCmdResponse() { error = "failed to fetch static data" };
} }*/
// Get latest static data info from server // Get latest static data info from server
ResStaticDataPackInfoV2? staticData2 = await FetchProtobuf<ResStaticDataPackInfoV2, ReqStaticDataPackInfoV2>(staticDataUrl, ResStaticDataPackInfoV2? staticData2 = await FetchProtobuf<ResStaticDataPackInfoV2, ReqStaticDataPackInfoV2>(staticDataUrl,
@@ -434,10 +434,10 @@ namespace EpinelPS.Utils
} }
GameConfig.Root.ResourceBaseURL = resources.BaseUrl; GameConfig.Root.ResourceBaseURL = resources.BaseUrl;
GameConfig.Root.StaticData.Salt1 = staticData.Salt1.ToBase64(); /*GameConfig.Root.StaticData.Salt1 = staticData.Salt1.ToBase64();
GameConfig.Root.StaticData.Salt2 = staticData.Salt2.ToBase64(); GameConfig.Root.StaticData.Salt2 = staticData.Salt2.ToBase64();
GameConfig.Root.StaticData.Version = staticData.Version; GameConfig.Root.StaticData.Version = staticData.Version;
GameConfig.Root.StaticData.Url = staticData.Url; GameConfig.Root.StaticData.Url = staticData.Url;*/
GameConfig.Root.StaticDataMpk.Salt1 = staticData2.Salt1.ToBase64(); GameConfig.Root.StaticDataMpk.Salt1 = staticData2.Salt1.ToBase64();
GameConfig.Root.StaticDataMpk.Salt2 = staticData2.Salt2.ToBase64(); GameConfig.Root.StaticDataMpk.Salt2 = staticData2.Salt2.ToBase64();

View File

@@ -6,13 +6,13 @@
"Salt2": "VwXjh0/SPpN+Osa8bvroFVNYIKd5F06vS1KYlIaVGAY=" "Salt2": "VwXjh0/SPpN+Osa8bvroFVNYIKd5F06vS1KYlIaVGAY="
}, },
"StaticDataMpk": { "StaticDataMpk": {
"Url": "https://cloud.nikke-kr.com/prdenv/137-ca2cdb9fcd/staticdata/data/qa-250904-09b/453421/mpk/StaticData.pack", "Url": "https://cloud.nikke-kr.com/prdenv/138-c33f99fd4f/staticdata/data/qa-250924-09c/461037/mpk/StaticData.pack",
"Version": "data/qa-250904-09b/453421", "Version": "data/qa-250924-09c/461037",
"Salt1": "y/K4n/++KE1v1UGqSfoXV2+ilMqXlJP2AJzGTvy7F70=", "Salt1": "mSeQrFtpXu5ExqxZKo79PMMbr8mm1F2Und+yt/xrsWE=",
"Salt2": "AFdGkgz20UZQ6C9p8z4IE6Dv5fzz46ggE9Wv6m6pTjI=" "Salt2": "eHer1RRkj8MCDRyb8J76cULrTUsEJY7OExTr4sKz6Wk="
}, },
"ResourceBaseURL": "https://cloud.nikke-kr.com/prdenv/137-b7e4a25fec/{Platform}", "ResourceBaseURL": "https://cloud.nikke-kr.com/prdenv/138-b89af37c16/{Platform}",
"GameMinVer": "100.0.1", "GameMinVer": "100.0.1",
"GameMaxVer": "150.0.2", "GameMaxVer": "150.0.2",
"TargetVersion": "137.8.9" "TargetVersion": "138.8.14"
} }

View File

@@ -6,18 +6,18 @@
"version_info": { "version_info": {
"game_id": "16601", "game_id": "16601",
"branch_id": "1", "branch_id": "1",
"version_id": "0.0.0.56", "version_id": "0.0.0.57",
"version_name": "NIKKE.PC_Offcial_GL_137.8.7", "version_name": "NIKKE.PC_Offcial_GL_138.8.14",
"version_status": 7, "version_status": 7,
"service_status": 0, "service_status": 0,
"build_id": "3063", "build_id": "3071",
"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\":\"f7f158a20392f3355b15e6908f0f5e75\",\"chunk_size\":115232,\"chunk_uncompress_md5\":\"f7f158a20392f3355b15e6908f0f5e75\",\"chunk_uncompress_size\":115232}],\"file_url\":\"/manifestv2/48_5937488248518599460_0.manifest\",\"manifest_md5\":\"f7f158a20392f3355b15e6908f0f5e75\",\"manifest_size\":115232}],\"manifest_flag\":13,\"manifest_id\":5937488248518600000,\"manifest_version\":2,\"patch_size\":182554328,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":48,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":462051623,\"repository_type\":\"Game\",\"repository_uncompress_size\":950326914}]", "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\":\"9aaa5675f669d16941839867e012e902\",\"chunk_size\":115864,\"chunk_uncompress_md5\":\"9aaa5675f669d16941839867e012e902\",\"chunk_uncompress_size\":115864}],\"file_url\":\"/manifestv2/48_5937488248518605394_0.manifest\",\"manifest_md5\":\"9aaa5675f669d16941839867e012e902\",\"manifest_size\":115864}],\"manifest_flag\":13,\"manifest_id\":5937488248518606000,\"manifest_version\":2,\"patch_size\":103713164,\"repository_desc\":{\"zh_CN\":\"game repo\"},\"repository_id\":48,\"repository_name\":{\"en_US\":\"Game\",\"zh_CN\":\"Game\"},\"repository_size\":469227674,\"repository_type\":\"Game\",\"repository_uncompress_size\":963221126}]",
"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\":5937488248518601723}]", "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\":5937488248518607246}]",
"key_file_info": "[{\"crc\":1522599809,\"path\":\"NIKKE\\\\game\\\\nikke.exe\"}]", "key_file_info": "[{\"crc\":4219392621,\"path\":\"NIKKE\\\\game\\\\nikke.exe\"}]",
"install_script": "{\"script_content\":{\"executable\":[]}}", "install_script": "{\"script_content\":{\"executable\":[]}}",
"installer_size": "462051623", "installer_size": "469227674",
"installed_size": "950326914", "installed_size": "963221126",
"publish_time_in_unix": "1756953540", "publish_time_in_unix": "1758641891",
"is_first_version_in_branch": "1", "is_first_version_in_branch": "1",
"version_description": "[{\"lang_code\":\"en\",\"text\":\"\"},{\"lang_code\":\"ja\",\"text\":\"\"},{\"lang_code\":\"ko\",\"text\":\"\"}]", "version_description": "[{\"lang_code\":\"en\",\"text\":\"\"},{\"lang_code\":\"ja\",\"text\":\"\"},{\"lang_code\":\"ko\",\"text\":\"\"}]",
"update_type": 0 "update_type": 0