Decrease database size

This commit is contained in:
Mikhail
2024-07-15 11:30:18 -04:00
parent 645697f713
commit 15778751af
7 changed files with 53 additions and 26 deletions

View File

@@ -21,7 +21,7 @@ namespace nksrv.LobbyServer.Msgs.Campaign
var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId); var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId);
var mod = req.MapId.Contains("hard") ? "Hard" : "Normal"; var mod = req.MapId.Contains("hard") ? "Hard" : "Normal";
var key = chapter + "_" + mod; var key = chapter + "_" + mod;
var field = user.FieldInfo[key]; var field = user.FieldInfoNew[key];
// TODO // TODO
response.Reward = new(); response.Reward = new();

View File

@@ -25,7 +25,7 @@ namespace nksrv.LobbyServer.Msgs.Campaign
var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId); var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId);
var mod = req.MapId.Contains("hard") ? "Hard" : "Normal"; var mod = req.MapId.Contains("hard") ? "Hard" : "Normal";
var key = chapter + "_" + mod; 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 }); field.CompletedObjects.Add(new NetFieldObject() { PositionId = req.FieldObject.PositionID, Json = req.FieldObject.Json, Type = req.FieldObject.Type });
JsonDb.Save(); JsonDb.Save();

View File

@@ -18,11 +18,13 @@ namespace nksrv.LobbyServer.Msgs.Stage
var user = GetUser(); var user = GetUser();
Console.WriteLine("CheckClear len: " + req.StageIds.Count); 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) foreach (var stages in fields.Value.CompletedStages)
{ {
response.ClearedStageIds.Add(stages.StageId); response.ClearedStageIds.Add(stages);
} }
} }

View File

@@ -39,9 +39,9 @@ namespace nksrv.LobbyServer.Msgs.Stage
if (clearedStage == null) throw new Exception("cleared stage cannot be null"); 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); DoQuestSpecificUserOperations(user, StageId);
@@ -78,10 +78,10 @@ namespace nksrv.LobbyServer.Msgs.Stage
} }
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod; var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;
if (!user.FieldInfo.ContainsKey(key)) if (!user.FieldInfoNew.ContainsKey(key))
user.FieldInfo.Add(key, new FieldInfo()); user.FieldInfoNew.Add(key, new FieldInfoNew());
user.FieldInfo[key].CompletedStages.Add(new NetFieldStageData() { StageId = StageId }); user.FieldInfoNew[key].CompletedStages.Add(StageId);
JsonDb.Save(); JsonDb.Save();
return response; return response;
} }

View File

@@ -27,14 +27,14 @@ namespace nksrv.LobbyServer.Msgs.Stage
var f = new NetFieldObjectData(); var f = new NetFieldObjectData();
bool found = false; bool found = false;
string key = chapter + "_" + mod; string key = chapter + "_" + mod;
foreach (var item in user.FieldInfo) foreach (var item in user.FieldInfoNew)
{ {
if (item.Key == key) if (item.Key == key)
{ {
found = true; found = true;
foreach (var stage in item.Value.CompletedStages) 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) foreach (var obj in item.Value.CompletedObjects)
{ {
@@ -46,7 +46,7 @@ namespace nksrv.LobbyServer.Msgs.Stage
if (!found) if (!found)
{ {
user.FieldInfo.Add(key, new FieldInfo()); user.FieldInfoNew.Add(key, new FieldInfoNew());
return CreateFieldInfo(user, chapter, mod); return CreateFieldInfo(user, chapter, mod);
} }

View File

@@ -15,12 +15,12 @@ namespace nksrv.LobbyServer.Msgs.User
List<int> specialStages = [6003003, 6002008, 6002016, 6005003, 6003021, 6011018, 6007021, 6004018, 6005013, 6003009, 6003012, 6009017, 6016039, 6001004, 6000003, 6000001, 6002001, 6004023, 6005026, 6020050, 6006004, 6006023]; List<int> 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(); var response = new ResGetContentsOpenData();
foreach (var field in user.FieldInfo.Values) foreach (var field in user.FieldInfoNew.Values)
{ {
foreach (var stage in field.CompletedStages) foreach (var stage in field.CompletedStages)
{ {
if (specialStages.Contains(stage.StageId)) if (specialStages.Contains(stage))
response.ClearStageList.Add(stage.StageId); response.ClearStageList.Add(stage);
} }
} }
response.MaxGachaCount = 10; response.MaxGachaCount = 10;

View File

@@ -18,6 +18,12 @@ namespace nksrv.Utils
public List<NetFieldObject> CompletedObjects = []; public List<NetFieldObject> CompletedObjects = [];
} }
public class FieldInfoNew
{
public List<int> CompletedStages = [];
public List<NetFieldObject> CompletedObjects = [];
}
public class Character public class Character
{ {
// TODO // TODO
@@ -76,7 +82,9 @@ namespace nksrv.Utils
// Game data // Game data
public List<string> CompletedScenarios = []; public List<string> CompletedScenarios = [];
public Dictionary<string, FieldInfo> FieldInfo = []; public Dictionary<string, FieldInfo> FieldInfo = []; // here for backwards compatibility
public Dictionary<string, FieldInfoNew> FieldInfoNew = [];
public Dictionary<string, string> MapJson = []; public Dictionary<string, string> MapJson = [];
public Dictionary<CurrencyType, long> Currency = new() { public Dictionary<CurrencyType, long> Currency = new() {
{ CurrencyType.ContentStamina, 2 }, { CurrencyType.ContentStamina, 2 },
@@ -132,16 +140,13 @@ namespace nksrv.Utils
public bool IsStageCompleted(int id, bool isNorm) 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("hard") && isNorm) continue;
if (item.Key.Contains("normal") && !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 class CoreInfo
{ {
public int DbVersion = 2; public int DbVersion = 3;
public List<User> Users = []; public List<User> Users = [];
public List<AccessToken> LauncherAccessTokens = []; public List<AccessToken> LauncherAccessTokens = [];
@@ -185,14 +190,14 @@ namespace nksrv.Utils
foreach (var user in Instance.Users) 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); var isNumeric = int.TryParse(f.Key, out int n);
if (isNumeric) if (isNumeric)
{ {
var val = f.Value; var val = f.Value;
user.FieldInfo.Remove(f.Key); user.FieldInfoNew.Remove(f.Key);
user.FieldInfo.Add(n + "_Normal", val); user.FieldInfoNew.Add(n + "_Normal", val);
} }
} }
} }
@@ -212,6 +217,26 @@ namespace nksrv.Utils
} }
Console.WriteLine("Database update completed"); 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(); Save();
ValidateDb(); ValidateDb();