From 15778751afc27375ba1ebf49b5416365c2a351f8 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Mon, 15 Jul 2024 11:30:18 -0400 Subject: [PATCH] Decrease database size --- nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs | 2 +- .../Msgs/Campaign/SaveFieldObject.cs | 2 +- nksrv/LobbyServer/Msgs/Stage/CheckCleared.cs | 6 ++- nksrv/LobbyServer/Msgs/Stage/ClearStage.cs | 10 ++-- nksrv/LobbyServer/Msgs/Stage/GetStage.cs | 6 +-- .../LobbyServer/Msgs/User/GetContentsData.cs | 6 +-- nksrv/Utils/JsonDb.cs | 47 ++++++++++++++----- 7 files changed, 53 insertions(+), 26 deletions(-) diff --git a/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs index c8f409a..7706867 100644 --- a/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs +++ b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs @@ -21,7 +21,7 @@ namespace nksrv.LobbyServer.Msgs.Campaign var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId); var mod = req.MapId.Contains("hard") ? "Hard" : "Normal"; var key = chapter + "_" + mod; - var field = user.FieldInfo[key]; + var field = user.FieldInfoNew[key]; // TODO response.Reward = new(); diff --git a/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs b/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs index 029622f..ef1399f 100644 --- a/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs +++ b/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs @@ -25,7 +25,7 @@ namespace nksrv.LobbyServer.Msgs.Campaign var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId); var mod = req.MapId.Contains("hard") ? "Hard" : "Normal"; var key = chapter + "_" + mod; - var field = user.FieldInfo[key]; + var field = user.FieldInfoNew[key]; field.CompletedObjects.Add(new NetFieldObject() { PositionId = req.FieldObject.PositionID, Json = req.FieldObject.Json, Type = req.FieldObject.Type }); JsonDb.Save(); diff --git a/nksrv/LobbyServer/Msgs/Stage/CheckCleared.cs b/nksrv/LobbyServer/Msgs/Stage/CheckCleared.cs index e1c6d93..a9a7ec8 100644 --- a/nksrv/LobbyServer/Msgs/Stage/CheckCleared.cs +++ b/nksrv/LobbyServer/Msgs/Stage/CheckCleared.cs @@ -18,11 +18,13 @@ namespace nksrv.LobbyServer.Msgs.Stage var user = GetUser(); Console.WriteLine("CheckClear len: " + req.StageIds.Count); - foreach (var fields in user.FieldInfo) + // TODO: is this correct + + foreach (var fields in user.FieldInfoNew) { foreach (var stages in fields.Value.CompletedStages) { - response.ClearedStageIds.Add(stages.StageId); + response.ClearedStageIds.Add(stages); } } diff --git a/nksrv/LobbyServer/Msgs/Stage/ClearStage.cs b/nksrv/LobbyServer/Msgs/Stage/ClearStage.cs index 22d6dc7..685cbce 100644 --- a/nksrv/LobbyServer/Msgs/Stage/ClearStage.cs +++ b/nksrv/LobbyServer/Msgs/Stage/ClearStage.cs @@ -39,9 +39,9 @@ namespace nksrv.LobbyServer.Msgs.Stage if (clearedStage == null) throw new Exception("cleared stage cannot be null"); - if (user.FieldInfo.Count == 0) + if (user.FieldInfoNew.Count == 0) { - user.FieldInfo.Add("0_" + clearedStage.chapter_mod, new FieldInfo() { }); + user.FieldInfoNew.Add("0_" + clearedStage.chapter_mod, new FieldInfoNew() { }); } DoQuestSpecificUserOperations(user, StageId); @@ -78,10 +78,10 @@ namespace nksrv.LobbyServer.Msgs.Stage } var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod; - if (!user.FieldInfo.ContainsKey(key)) - user.FieldInfo.Add(key, new FieldInfo()); + if (!user.FieldInfoNew.ContainsKey(key)) + user.FieldInfoNew.Add(key, new FieldInfoNew()); - user.FieldInfo[key].CompletedStages.Add(new NetFieldStageData() { StageId = StageId }); + user.FieldInfoNew[key].CompletedStages.Add(StageId); JsonDb.Save(); return response; } diff --git a/nksrv/LobbyServer/Msgs/Stage/GetStage.cs b/nksrv/LobbyServer/Msgs/Stage/GetStage.cs index bc50cf2..c7f3d64 100644 --- a/nksrv/LobbyServer/Msgs/Stage/GetStage.cs +++ b/nksrv/LobbyServer/Msgs/Stage/GetStage.cs @@ -27,14 +27,14 @@ namespace nksrv.LobbyServer.Msgs.Stage var f = new NetFieldObjectData(); bool found = false; string key = chapter + "_" + mod; - foreach (var item in user.FieldInfo) + foreach (var item in user.FieldInfoNew) { if (item.Key == key) { found = true; foreach (var stage in item.Value.CompletedStages) { - f.Stages.Add(stage); + f.Stages.Add(new NetFieldStageData() { StageId = stage }); } foreach (var obj in item.Value.CompletedObjects) { @@ -46,7 +46,7 @@ namespace nksrv.LobbyServer.Msgs.Stage if (!found) { - user.FieldInfo.Add(key, new FieldInfo()); + user.FieldInfoNew.Add(key, new FieldInfoNew()); return CreateFieldInfo(user, chapter, mod); } diff --git a/nksrv/LobbyServer/Msgs/User/GetContentsData.cs b/nksrv/LobbyServer/Msgs/User/GetContentsData.cs index 9bf44a5..d642d37 100644 --- a/nksrv/LobbyServer/Msgs/User/GetContentsData.cs +++ b/nksrv/LobbyServer/Msgs/User/GetContentsData.cs @@ -15,12 +15,12 @@ namespace nksrv.LobbyServer.Msgs.User List specialStages = [6003003, 6002008, 6002016, 6005003, 6003021, 6011018, 6007021, 6004018, 6005013, 6003009, 6003012, 6009017, 6016039, 6001004, 6000003, 6000001, 6002001, 6004023, 6005026, 6020050, 6006004, 6006023]; var response = new ResGetContentsOpenData(); - foreach (var field in user.FieldInfo.Values) + foreach (var field in user.FieldInfoNew.Values) { foreach (var stage in field.CompletedStages) { - if (specialStages.Contains(stage.StageId)) - response.ClearStageList.Add(stage.StageId); + if (specialStages.Contains(stage)) + response.ClearStageList.Add(stage); } } response.MaxGachaCount = 10; diff --git a/nksrv/Utils/JsonDb.cs b/nksrv/Utils/JsonDb.cs index b86497b..7d1bc28 100644 --- a/nksrv/Utils/JsonDb.cs +++ b/nksrv/Utils/JsonDb.cs @@ -18,6 +18,12 @@ namespace nksrv.Utils public List CompletedObjects = []; } + public class FieldInfoNew + { + public List CompletedStages = []; + public List CompletedObjects = []; + } + public class Character { // TODO @@ -76,7 +82,9 @@ namespace nksrv.Utils // Game data public List CompletedScenarios = []; - public Dictionary FieldInfo = []; + public Dictionary FieldInfo = []; // here for backwards compatibility + + public Dictionary FieldInfoNew = []; public Dictionary MapJson = []; public Dictionary Currency = new() { { CurrencyType.ContentStamina, 2 }, @@ -132,16 +140,13 @@ namespace nksrv.Utils public bool IsStageCompleted(int id, bool isNorm) { - foreach (var item in FieldInfo) + foreach (var item in FieldInfoNew) { if (item.Key.Contains("hard") && isNorm) continue; if (item.Key.Contains("normal") && !isNorm) continue; - foreach (var s in item.Value.CompletedStages) + if (item.Value.CompletedStages.Contains(id)) { - if (s.StageId == id) - { - return true; - } + return true; } } @@ -150,7 +155,7 @@ namespace nksrv.Utils } public class CoreInfo { - public int DbVersion = 2; + public int DbVersion = 3; public List Users = []; public List LauncherAccessTokens = []; @@ -185,14 +190,14 @@ namespace nksrv.Utils foreach (var user in Instance.Users) { - foreach (var f in user.FieldInfo.ToList()) + foreach (var f in user.FieldInfoNew.ToList()) { var isNumeric = int.TryParse(f.Key, out int n); if (isNumeric) { var val = f.Value; - user.FieldInfo.Remove(f.Key); - user.FieldInfo.Add(n + "_Normal", val); + user.FieldInfoNew.Remove(f.Key); + user.FieldInfoNew.Add(n + "_Normal", val); } } } @@ -212,6 +217,26 @@ namespace nksrv.Utils } Console.WriteLine("Database update completed"); } + else if (Instance.DbVersion == 2) + { + Console.WriteLine("Starting database update..."); + // I used to use a class for FieldInfo cleared stages, but now int list is used + Instance.DbVersion = 3; + foreach (var user in Instance.Users) + { + foreach (var f in user.FieldInfo) + { + var newField = new FieldInfoNew(); + foreach (var stage in f.Value.CompletedStages) + { + newField.CompletedStages.Add(stage.StageId); + } + user.FieldInfoNew.Add(f.Key, newField); + } + user.FieldInfo.Clear(); + } + Console.WriteLine("Database update completed"); + } Save(); ValidateDb();