update to game version g122.8.20c

This commit is contained in:
Mikhail Thompson
2024-07-03 15:14:32 -04:00
parent 53dab52b9a
commit 589d7be4eb
13 changed files with 144 additions and 16 deletions

View File

@@ -10,9 +10,12 @@ namespace ProtobufViewUtil
{
Console.WriteLine("Hello, World!");
ResGetMainQuestData s = new ResGetMainQuestData();
var inn = File.ReadAllBytes(@"C:\Users\Misha\Downloads\getmainquestdata-ch1complete2");
StaticDataPackResponse s = new StaticDataPackResponse();
var inn = File.ReadAllBytes(@"C:\Users\Misha\Downloads\staticdatanew");
s.MergeFrom(inn);
Console.WriteLine("salt1: " + Convert.ToBase64String(s.Salt1.ToArray()));
Console.WriteLine("salt2: " + Convert.ToBase64String(s.Salt2.ToArray()));
Console.WriteLine("sha: " + Convert.ToBase64String(s.Sha256Sum.ToArray()));
Console.WriteLine(s.ToString());
var outt = s.ToByteArray();

View File

@@ -18,7 +18,11 @@ After that, add the following to your C:\Windows\System32\hosts or /etc/hosts fi
255.255.221.21 sentry.io
```
Run generate_ssl_cert.sh in WSL or linux to generate SSL certificates. Make sure to trust myCA.pfx
Run generate_ssl_cert.sh in WSL or linux to generate SSL certificates. Make sure to trust myCA.pfx. Append the following (with your CA cert pem that you generated) to Launcher/intl_service/cacert.pem and NIKKE/game/nikke_Data/Plugins/cacert.pem
Good SSL CA
===============================
<ca cert>
As Nikke encrypts packet data, you also need to replace C:\NIKKE\NIKKE\game\nikke_Data\Plugins\x86_64\sodium.dll from the one you built.

View File

@@ -142,7 +142,9 @@ namespace nksrv.LobbyServer
Icon = user.ProfileIconId,
IconPrism = user.ProfileIconIsPrism,
Nickname = user.Nickname,
Usn = (long)user.ID
Usn = (long)user.ID,
LastActionAt = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
};
return ret;

View File

@@ -15,7 +15,7 @@ namespace nksrv.LobbyServer.Msgs.Misc
var req = await ReadData<ResourceHostRequest>();
var r = new ResourceHostResponse();
r.BaseUrl = "https://cloud.nikke-kr.com/prdenv/121-b0630db21d/{Platform}";
r.BaseUrl = "https://cloud.nikke-kr.com/prdenv/122-b0255105e0/{Platform}";
WriteData(r);
}

View File

@@ -27,6 +27,8 @@ namespace nksrv.LobbyServer.Msgs.User
response.SynchroLv = 1;
response.OutpostBattleLevel = user.OutpostBattleLevel;
response.OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = battleTimeMs };
response.CommanderRoomJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 8989001, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom };
response.LobbyJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 8989001, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.Lobby };
// Add default slot data
if (user.RepresentationTeamData.Slots.Count == 0)

View File

@@ -0,0 +1,23 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/ProfileCard/DecorationLayout/Get")]
public class GetProfileDecoration : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqProfileCardDecorationLayout>();
var r = new ResProfileCardDecorationLayout();
r.Layout = new ProfileCardDecorationLayout();
r.Layout.BackgroundId = 101002;
WriteData(r);
}
}
}

View File

@@ -40,6 +40,8 @@ namespace nksrv.LobbyServer.Msgs.User
int tutorialVersion = item == 1020101 ? 1 : 0; // TODO
response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion });
}
response.CommanderRoomJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 8989001, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom };
response.LobbyJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 8989001, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.Lobby };
WriteData(response);
}
}

View File

@@ -21,6 +21,7 @@ namespace nksrv.LobbyServer.Msgs.User
if (user.ID == (ulong)req.TargetUsn)
{
response.Data.User = LobbyHandler.CreateWholeUserDataFromDbUser(user);
response.Data.LastActionAt = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
}
else
{

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/lobby/usertitle/get")]
public class GetUserTitle : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetUserTitleList>();
var r = new ResGetUserTitleList();
WriteData(r);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/lobby/usertitlecounter/get")]
public class GetUserTitleCounter : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetUserTitleCounterList>();
var r = new ResGetUserTitleCounterList();
WriteData(r);
}
}
}

View File

@@ -219,8 +219,8 @@ namespace nksrv
""Config"": [
{
""VersionRange"": {
""From"": ""121.8.9"",
""To"": ""121.10.2"",
""From"": ""122.8.19"",
""To"": ""122.8.20"",
""PackageName"": ""com.proximabeta.nikke""
},
""Route"": [
@@ -263,8 +263,8 @@ namespace nksrv
},
{
""VersionRange"": {
""From"": ""121.8.9"",
""To"": ""121.10.2"",
""From"": ""121.8.19"",
""To"": ""122.8.20"",
""PackageName"": ""com.gamamobi.nikke""
},
""Route"": [

View File

@@ -222,6 +222,8 @@ message ResGetUserData {
int32 resetHour = 35;
bool isSimple = 36;
NetOutpostBattleTime outpostBattleTime = 37;
NetJukeboxBgm lobbyJukeboxBgm = 38;
NetJukeboxBgm commanderRoomJukeboxBgm = 39;
}
message ReqGetContentsOpenData {
@@ -457,6 +459,8 @@ message ResEnterLobbyServer {
repeated NetEquipmentAwakening awakening = 37;
repeated NetUserRedeemData redeems = 38;
NetOutpostBattleTime outpostBattleTime = 39;
NetJukeboxBgm lobbyJukeboxBgm = 40;
NetJukeboxBgm commanderRoomJukeboxBgm = 41;
}
message ReqGetMainQuestData {
@@ -1757,4 +1761,43 @@ message ReqSetCharacterCostume {
int64 csn = 2;
int32 costumeId = 3;
}
message ResSetCharacterCostume {}
message ResSetCharacterCostume {}
message NetUserTitle {
int32 userTitleId = 1;
bool isNew = 2;
}
message ReqGetUserTitleList {}
message ResGetUserTitleList{
repeated NetUserTitle userTitleList = 1;
}
message ReqGetUserTitleCounterList{}
message ResGetUserTitleCounterList{
int32 condition = 1;
int32 subCondition = 2;
int32 count = 3;
}
message ReqProfileCardDecorationLayout {
int64 targetUsn = 1;
}
message StickerPlacement {
int32 stickerId = 1;
int32 layer = 2;
float normalizedX = 3;
float normalizedY = 4;
float rotationRadian = 5;
float scale = 6;
}
message ProfileCardDecorationLayout {
bool showCharacterSpine = 1;
int32 backgroundId = 2;
repeated StickerPlacement stickerPlacements = 3;
}
message ResProfileCardDecorationLayout {
ProfileCardDecorationLayout layout = 1;
}

View File

@@ -21,12 +21,12 @@ namespace nksrv.StaticInfo
public class StaticDataParser
{
// Extracted from staticinfo api call
public const string StaticDataUrl = "https://cloud.nikke-kr.com/prdenv/121-c5e64b1a1b/staticdata/data/qa-240620-05b-p1/307748/StaticData.pack";
public const string Version = "data/qa-240620-05b-p1/307748";
public const int Size = 11575712;
public static byte[] Sha256Sum = Convert.FromBase64String("PBcDa3PoHR2MJQ+4Xc3/FUSgkqx2gY25MBJ0ih9FMsM=");
public static byte[] Salt1 = Convert.FromBase64String("WqyrQ8MGtzwHN3AGPkqVKyjdfWZjBJXw9K7nGblv/SA=");
public static byte[] Salt2 = Convert.FromBase64String("6Gf2jEvAX2mt5OWIxIU5uDdbjKtIc+VgTjKKSLuYnsI=");
public const string StaticDataUrl = "https://cloud.nikke-kr.com/prdenv/122-c8cee37754/staticdata/data/qa-240704-07b/311489/StaticData.pack";
public const string Version = "data/qa-240704-07b/311489";
public const int Size = 11799600;
public static byte[] Sha256Sum = Convert.FromBase64String("IkQKRnt2ue9ET5HCJo4JTK8M6XIi86iLGwl7thZFNMs=");
public static byte[] Salt1 = Convert.FromBase64String("O5IyNKavbnmnEVqj2CZDLyORctcGFgYKx839PudpDNo=");
public static byte[] Salt2 = Convert.FromBase64String("/870A4CG4n3gAGnHNRS4zdo3wBry8CISud+41MVA8sA=");
// These fields were extracted from the game.
public static byte[] PresharedKey = [0xCB, 0xC2, 0x1C, 0x6F, 0xF3, 0xF5, 0x07, 0xF5, 0x05, 0xBA, 0xCA, 0xD4, 0x98, 0x28, 0x84, 0x1F, 0xF0, 0xD1, 0x38, 0xC7, 0x61, 0xDF, 0xD6, 0xE6, 0x64, 0x9A, 0x85, 0x13, 0x3E, 0x1A, 0x6A, 0x0C, 0x68, 0x0E, 0x2B, 0xC4, 0xDF, 0x72, 0xF8, 0xC6, 0x55, 0xE4, 0x7B, 0x14, 0x36, 0x18, 0x3B, 0xA7, 0xD1, 0x20, 0x81, 0x22, 0xD1, 0xA9, 0x18, 0x84, 0x65, 0x13, 0x0B, 0xED, 0xA3, 0x00, 0xE5, 0xD9];
@@ -113,6 +113,10 @@ namespace nksrv.StaticInfo
ZipStream = new MemoryStream();
AesCtrTransform(decryptionKey2, iv2, dataMs, ZipStream);
File.WriteAllBytes("decryptednew.zip", ZipStream.ToArray());
ZipStream.Position = 0;
MainZip = new ZipFile(ZipStream, false);
}