Basic manufacturer tower implementation with progress saving. (#15)

* Basic manufacturer tower with progress saving

* Whoops
This commit is contained in:
Atlazs
2024-09-18 02:19:42 +02:00
committed by GitHub
parent bb0e0315ab
commit 43abfe1aa8
5 changed files with 96 additions and 0 deletions

View File

@@ -171,6 +171,8 @@ namespace EpinelPS.Database
public List<int> Memorial = new();
public List<int> JukeboxBgm = new List<int>();
public Dictionary<int, int> TowerProgress = new Dictionary<int, int>();
// Event data
public Dictionary<int, EventData> EventInfo = new();

View File

@@ -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<ReqClearTower>();
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;
}
}
}

View File

@@ -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<ReqEnterTower>();
var response = new ResEnterTower();
await WriteDataAsync(response);
}
}
}

View File

@@ -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<ReqFastClearTower>();
var response = new ResFastClearTower();
await WriteDataAsync(response);
}
}
}

View File

@@ -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);