diff --git a/EpinelPS/Database/JsonDb.cs b/EpinelPS/Database/JsonDb.cs index ef703ee..2848813 100644 --- a/EpinelPS/Database/JsonDb.cs +++ b/EpinelPS/Database/JsonDb.cs @@ -171,6 +171,8 @@ namespace EpinelPS.Database public List Memorial = new(); public List JukeboxBgm = new List(); + public Dictionary TowerProgress = new Dictionary(); + // Event data public Dictionary EventInfo = new(); diff --git a/EpinelPS/LobbyServer/Msgs/Tower/ClearTower.cs b/EpinelPS/LobbyServer/Msgs/Tower/ClearTower.cs new file mode 100644 index 0000000..95e905c --- /dev/null +++ b/EpinelPS/LobbyServer/Msgs/Tower/ClearTower.cs @@ -0,0 +1,47 @@ +using EpinelPS.Database; +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Msgs.Tower +{ + [PacketPath("/tower/cleartower")] + public class ClearTower : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + + var response = new ResClearTower(); + var user = GetUser(); + + if (req.BattleResult == 1) + { + response = CompleteTower(user, req.TowerId); + } + + await WriteDataAsync(response); + } + + public static ResClearTower CompleteTower(Database.User user, int TowerId) + { + var response = new ResClearTower(); + + // Parse TowerId to get TowerType and FloorNumber + int TowerType = (TowerId / 10000) - 1; // For some weird reason the Type here doesn't match up with NetTowerData, thus the -1 + int FloorNumber = TowerId % 10000; + + // Update user's TowerProgress + if (!user.TowerProgress.ContainsKey(TowerType)) + { + user.TowerProgress[TowerType] = FloorNumber; + } + else if (user.TowerProgress[TowerType] < FloorNumber) + { + user.TowerProgress[TowerType] = FloorNumber; + } + + JsonDb.Save(); + + return response; + } + } +} \ No newline at end of file diff --git a/EpinelPS/LobbyServer/Msgs/Tower/EnterTower.cs b/EpinelPS/LobbyServer/Msgs/Tower/EnterTower.cs new file mode 100644 index 0000000..8adedf5 --- /dev/null +++ b/EpinelPS/LobbyServer/Msgs/Tower/EnterTower.cs @@ -0,0 +1,17 @@ +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Msgs.Tower +{ + [PacketPath("/tower/entertower")] + public class EnterTower : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + + var response = new ResEnterTower(); + + await WriteDataAsync(response); + } + } +} diff --git a/EpinelPS/LobbyServer/Msgs/Tower/FastClearTower.cs b/EpinelPS/LobbyServer/Msgs/Tower/FastClearTower.cs new file mode 100644 index 0000000..0400b20 --- /dev/null +++ b/EpinelPS/LobbyServer/Msgs/Tower/FastClearTower.cs @@ -0,0 +1,17 @@ +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Msgs.Tower +{ + [PacketPath("/tower/fastcleartower")] + public class FastClearTower : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + + var response = new ResFastClearTower(); + + await WriteDataAsync(response); + } + } +} diff --git a/EpinelPS/LobbyServer/Msgs/Tower/GetTowerData.cs b/EpinelPS/LobbyServer/Msgs/Tower/GetTowerData.cs index a60e60c..47c07f2 100644 --- a/EpinelPS/LobbyServer/Msgs/Tower/GetTowerData.cs +++ b/EpinelPS/LobbyServer/Msgs/Tower/GetTowerData.cs @@ -11,6 +11,8 @@ namespace EpinelPS.LobbyServer.Msgs.Tower var response = new ResGetTowerData(); + var user = GetUser(); + // TODO: Load remain count for these var t0 = new NetTowerData() { Type = 1, RemainCount = 3 }; var t1 = new NetTowerData() { Type = 2, RemainCount = 3 }; @@ -25,6 +27,17 @@ namespace EpinelPS.LobbyServer.Msgs.Tower t3.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 2, 6 }, StartTime = 720000000000, Duration = 863990000000 } }); t4.Schedules.Add(new NetSchedule() { AllTime = new() }); + if (user.TowerProgress.TryGetValue(1, out int floor1)) + t0.Floor = floor1; + if (user.TowerProgress.TryGetValue(2, out int floor2)) + t1.Floor = floor2; + if (user.TowerProgress.TryGetValue(3, out int floor3)) + t2.Floor = floor3; + if (user.TowerProgress.TryGetValue(4, out int floor4)) + t3.Floor = floor4; + if (user.TowerProgress.TryGetValue(5, out int floor5)) + t4.Floor = floor5; + response.Data.Add(t0); response.Data.Add(t1); response.Data.Add(t2);