From b4cc603343ad976af94f8655bf3c8ada7791fbdd Mon Sep 17 00:00:00 2001 From: Mikhail Date: Fri, 5 Jul 2024 09:51:26 -0400 Subject: [PATCH] Various bug fixes Fix sim room system error Added stub for obtain item in field Properly save tutorial data --- nksrv/LobbyServer/LobbyHandler.cs | 11 ++++---- nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs | 26 +++++++++++++++++++ .../Msgs/Simroom/GetSimRoomData.cs | 22 ++++++++++++++++ nksrv/LobbyServer/Msgs/User/GetUser.cs | 10 ++++--- .../Msgs/User/Tutorial/SetTutorial.cs | 11 +++++--- nksrv/Protos/allmsgs.proto | 17 +++++++++++- nksrv/StaticInfo/JsonStaticData.cs | 12 ++++++++- nksrv/StaticInfo/StaticDataParser.cs | 24 +++++++++++++++++ nksrv/Utils/JsonDb.cs | 3 ++- 9 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs create mode 100644 nksrv/LobbyServer/Msgs/Simroom/GetSimRoomData.cs diff --git a/nksrv/LobbyServer/LobbyHandler.cs b/nksrv/LobbyServer/LobbyHandler.cs index 61c9824..f9d16ad 100644 --- a/nksrv/LobbyServer/LobbyHandler.cs +++ b/nksrv/LobbyServer/LobbyHandler.cs @@ -123,12 +123,13 @@ namespace nksrv.LobbyServer }; - // Restore completed tutorials. GroupID is the first 4 digits of the Table ID. - foreach (var item in user.ClearedTutorials) + // Restore completed tutorials. + foreach (var item in user.ClearedTutorialData) { - var groupId = int.Parse(item.ToString().Substring(0, 4)); - int tutorialVersion = item == 1020101 ? 1 : 0; // TODO: Read from static data - ret.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion }); + int groupId = item.Value.GroupId; + int version = item.Value.VersionGroup; + + ret.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = groupId, LastClearedVersion = version }); } return ret; diff --git a/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs new file mode 100644 index 0000000..53d8479 --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs @@ -0,0 +1,26 @@ +using nksrv.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace nksrv.LobbyServer.Msgs.Campaign +{ + [PacketPath("/campaign/obtain/item")] + public class ObtainItem : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + var response = new ResObtainCampaignItem(); + + // TODO + response.Reward = new(); + + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/Simroom/GetSimRoomData.cs b/nksrv/LobbyServer/Msgs/Simroom/GetSimRoomData.cs new file mode 100644 index 0000000..549e3ea --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Simroom/GetSimRoomData.cs @@ -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.Simroom +{ + [PacketPath("/simroom/get")] + public class GetSimRoomData : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + + var response = new ResGetSimRoom(); + // TODO + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/User/GetUser.cs b/nksrv/LobbyServer/Msgs/User/GetUser.cs index ea9131a..07865ed 100644 --- a/nksrv/LobbyServer/Msgs/User/GetUser.cs +++ b/nksrv/LobbyServer/Msgs/User/GetUser.cs @@ -34,12 +34,14 @@ namespace nksrv.LobbyServer.Msgs.User response.LastClearedNormalMainStageId = user.LastNormalStageCleared; // Restore completed tutorials. GroupID is the first 4 digits of the Table ID. - foreach (var item in user.ClearedTutorials) + foreach (var item in user.ClearedTutorialData) { - var groupId = int.Parse(item.ToString().Substring(0, 4)); - int tutorialVersion = item == 1020101 ? 1 : 0; // TODO - response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion }); + int groupId = item.Value.GroupId; + int version = item.Value.VersionGroup; + + response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = groupId, LastClearedVersion = version }); } + response.CommanderRoomJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 2, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom }; response.LobbyJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 2, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.Lobby }; diff --git a/nksrv/LobbyServer/Msgs/User/Tutorial/SetTutorial.cs b/nksrv/LobbyServer/Msgs/User/Tutorial/SetTutorial.cs index 82b4abc..9aa02a1 100644 --- a/nksrv/LobbyServer/Msgs/User/Tutorial/SetTutorial.cs +++ b/nksrv/LobbyServer/Msgs/User/Tutorial/SetTutorial.cs @@ -1,4 +1,5 @@ -using nksrv.Utils; +using nksrv.StaticInfo; +using nksrv.Utils; using System; using System.Collections.Generic; using System.Linq; @@ -14,8 +15,12 @@ namespace nksrv.LobbyServer.Msgs.User.Tutorial { var req = await ReadData(); var user = GetUser(); - if (!user.ClearedTutorials.Contains(req.LastClearedTid)) - user.ClearedTutorials.Add(req.LastClearedTid); + + if (!user.ClearedTutorialData.ContainsKey(req.LastClearedTid)) + { + var cleared = StaticDataParser.Instance.GetTutorialDataById(req.LastClearedTid); + user.ClearedTutorialData.Add(req.LastClearedTid, cleared); + } JsonDb.Save(); var response = new ResSetTutorial(); diff --git a/nksrv/Protos/allmsgs.proto b/nksrv/Protos/allmsgs.proto index b3fb94b..36db586 100644 --- a/nksrv/Protos/allmsgs.proto +++ b/nksrv/Protos/allmsgs.proto @@ -1872,4 +1872,19 @@ message ReqWearEquipment { int64 Isn = 2; int64 Csn = 3; } -message ResWearEquipment {} \ No newline at end of file +message ResWearEquipment {} + +message NetCampaignFieldObject { + string PositionID = 1; + int32 Type = 2; + repeated NetCampaignTeamPosition TeamPositions = 3; + string Json = 4; +} + +message ReqObtainCampaignItem { + string MapId = 2; + NetCampaignFieldObject FieldObject = 3; +} +message ResObtainCampaignItem { + NetRewardData Reward = 2; +} \ No newline at end of file diff --git a/nksrv/StaticInfo/JsonStaticData.cs b/nksrv/StaticInfo/JsonStaticData.cs index 0ecedeb..11a50e6 100644 --- a/nksrv/StaticInfo/JsonStaticData.cs +++ b/nksrv/StaticInfo/JsonStaticData.cs @@ -41,5 +41,15 @@ namespace nksrv.StaticInfo public int reward_id; public int reward_value; } - + + + public class ClearedTutorialData + { + public int id; + public int VersionGroup = 0; + public int GroupId; + public int ClearedStageId; + public int NextId; + public bool SaveTutorial; + } } diff --git a/nksrv/StaticInfo/StaticDataParser.cs b/nksrv/StaticInfo/StaticDataParser.cs index b289d85..5353eb6 100644 --- a/nksrv/StaticInfo/StaticDataParser.cs +++ b/nksrv/StaticInfo/StaticDataParser.cs @@ -48,6 +48,7 @@ namespace nksrv.StaticInfo private JArray chapterCampaignData; private JArray characterCostumeTable; private JArray characterTable; + private JArray tutorialTable; public StaticDataParser(string filePath) { if (!File.Exists(filePath)) throw new ArgumentException("Static data file must exist", nameof(filePath)); @@ -230,6 +231,7 @@ namespace nksrv.StaticInfo chapterCampaignData = await LoadZip("CampaignChapterTable.json"); characterCostumeTable = await LoadZip("CharacterCostumeTable.json"); characterTable = await LoadZip("CharacterTable.json"); + tutorialTable = await LoadZip("ContentsTutorialTable.json"); } public MainQuestCompletionData? GetMainQuestForStageClearCondition(int stage) @@ -382,5 +384,27 @@ namespace nksrv.StaticInfo yield return value; } } + + internal ClearedTutorialData GetTutorialDataById(int TableId) + { + foreach (JObject item in tutorialTable) + { + var id = item["id"]; + if (id == null) + { + throw new Exception("expected id field in reward data"); + } + + int idValue = id.ToObject(); + if (idValue == TableId) + { + ClearedTutorialData? data = JsonConvert.DeserializeObject(item.ToString()); + if (data == null) throw new Exception("failed to deserialize reward data"); + return data; + } + } + + throw new Exception("tutorial not found: " + TableId); + } } } diff --git a/nksrv/Utils/JsonDb.cs b/nksrv/Utils/JsonDb.cs index 8f1cb11..358c836 100644 --- a/nksrv/Utils/JsonDb.cs +++ b/nksrv/Utils/JsonDb.cs @@ -1,6 +1,7 @@ using ASodium; using Newtonsoft.Json; using nksrv.LobbyServer; +using nksrv.StaticInfo; using Swan.Logging; using System; using System.Collections.Generic; @@ -78,7 +79,7 @@ namespace nksrv.Utils public List Items = new(); public List Characters = []; public NetWholeUserTeamData RepresentationTeamData = new(); - public List ClearedTutorials = []; + public Dictionary ClearedTutorialData = []; public NetWallpaperData[] WallpaperList = []; public Dictionary UserTeams = new Dictionary(); public Dictionary MainQuestData = new()