From 6298471c0966ad5ef2d10e963446edc03711a137 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Thu, 1 May 2025 19:16:47 -0400 Subject: [PATCH] begin work on subquests --- EpinelPS/Database/JsonDb.cs | 27 ++++++++++++++++++ EpinelPS/LobbyServer/Gacha/ExecGacha.cs | 2 +- .../LobbyServer/Subquest/ListSubquests.cs | 10 ++++++- EpinelPS/LobbyServer/Subquest/SetTrigger.cs | 28 +++++++++++++++++++ EpinelPS/Program.cs | 5 ++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 EpinelPS/LobbyServer/Subquest/SetTrigger.cs diff --git a/EpinelPS/Database/JsonDb.cs b/EpinelPS/Database/JsonDb.cs index 5dd0d93..fea884f 100644 --- a/EpinelPS/Database/JsonDb.cs +++ b/EpinelPS/Database/JsonDb.cs @@ -265,6 +265,7 @@ namespace EpinelPS.Database public Dictionary UserTeams = new Dictionary(); public Dictionary MainQuestData = new(); + public Dictionary SubQuestData = new(); public int InfraCoreExp = 0; public int InfraCoreLvl = 1; public UserPointData userPointData = new(); @@ -350,6 +351,15 @@ namespace EpinelPS.Database } } + public void SetSubQuest(int tid, bool recievedReward) + { + if (!SubQuestData.TryAdd(tid, recievedReward)) + { + SubQuestData[tid] = recievedReward; + return; + } + } + public int GenerateUniqueItemId() { var num = Rng.RandomId(); @@ -684,6 +694,23 @@ namespace EpinelPS.Database } } + public static void Reload() + { + if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "/db.json")) + { + Console.WriteLine("users: warning: configuration not found, writing default data"); + Instance = new CoreInfo(); + Save(); + } + + var j = JsonConvert.DeserializeObject(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/db.json")); + if (j != null) + { + Instance = j; + Console.WriteLine("Database reload complete."); + } + } + private static void ValidateDb() { // check if character level is valid diff --git a/EpinelPS/LobbyServer/Gacha/ExecGacha.cs b/EpinelPS/LobbyServer/Gacha/ExecGacha.cs index 210657b..e294157 100644 --- a/EpinelPS/LobbyServer/Gacha/ExecGacha.cs +++ b/EpinelPS/LobbyServer/Gacha/ExecGacha.cs @@ -214,12 +214,12 @@ namespace EpinelPS.LobbyServer.Gacha // Add "New Character" Badge user.AddBadge(BadgeContents.BadgeContentsNikkeNew, characterData.name_code.ToString()); + user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code); if (characterData.original_rare == "SSR" || characterData.original_rare == "SR") { user.BondInfo.Add(new() { NameCode = characterData.name_code, Level = 1 }); - user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code); } } diff --git a/EpinelPS/LobbyServer/Subquest/ListSubquests.cs b/EpinelPS/LobbyServer/Subquest/ListSubquests.cs index e926afd..b66a1de 100644 --- a/EpinelPS/LobbyServer/Subquest/ListSubquests.cs +++ b/EpinelPS/LobbyServer/Subquest/ListSubquests.cs @@ -8,10 +8,18 @@ namespace EpinelPS.LobbyServer.Subquest protected override async Task HandleAsync() { var req = await ReadData(); + var user = GetUser(); var response = new ResGetSubQuestList(); - // TOOD + foreach(var item in user.SubQuestData) + { + response.SubquestList.Add(new NetSubQuestData(){ + CreatedAt = DateTime.UtcNow.Ticks, // TODO does this matter + SubQuestId = item.Key, + IsReceived = item.Value + }); + } await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Subquest/SetTrigger.cs b/EpinelPS/LobbyServer/Subquest/SetTrigger.cs new file mode 100644 index 0000000..8c75fdd --- /dev/null +++ b/EpinelPS/LobbyServer/Subquest/SetTrigger.cs @@ -0,0 +1,28 @@ +using EpinelPS.Database; +using EpinelPS.StaticInfo; +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Subquest +{ + [PacketPath("/subquest/settrigger")] + public class SetTrigger : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + var response = new ResSetTriggerFromSubQuest(); + + if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out SubquestRecord? record)) + throw new Exception("no such subquest: " + req.SubquestId); + + user.AddTrigger(TriggerType.CampaignGroupClear, record.clear_condition_value, record.clear_condition_id); // TODO this may need to go elsewhere + user.AddTrigger(TriggerType.SubQuestClear, 1, req.SubquestId); + + JsonDb.Save(); + + await WriteDataAsync(response); + } + } +} diff --git a/EpinelPS/Program.cs b/EpinelPS/Program.cs index 9d6fc05..4daeb5d 100644 --- a/EpinelPS/Program.cs +++ b/EpinelPS/Program.cs @@ -210,6 +210,7 @@ namespace EpinelPS Console.WriteLine(" ls /users - show all users"); Console.WriteLine(" cd (user id) - select user by id"); Console.WriteLine(" rmuser - delete selected user"); + Console.WriteLine(" r - load changes to database from disk. Discards data in memory."); Console.WriteLine(" ban - ban selected user from game"); Console.WriteLine(" unban - unban selected user from game"); Console.WriteLine(" exit - exit server application"); @@ -898,6 +899,10 @@ namespace EpinelPS { Console.WriteLine("Not implemented"); } + else if (input == "r") + { + JsonDb.Reload(); + } else { Console.WriteLine("Unknown command");