diff --git a/EpinelPS/LobbyServer/Character/SynchroAddSlotByItem.cs b/EpinelPS/LobbyServer/Character/SynchroAddSlotByItem.cs new file mode 100644 index 0000000..7f00b9a --- /dev/null +++ b/EpinelPS/LobbyServer/Character/SynchroAddSlotByItem.cs @@ -0,0 +1,39 @@ +using EpinelPS.Database; +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Character +{ + [PacketPath("/character/synchrodevice/addslotbyitem")] + public class SynchroAddSlotByItem : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + // Broken protocol so we didn't validate request data. + // May fix later. + ReqSynchroAddSlot req = await ReadData(); + + User user = GetUser(); + ResSynchroAddSlot response = new(); + + NetSynchroSlot newSlot = new() + { + Csn = 0, + Slot = user.SynchroSlots.Last().Slot + 1, // any upper bound? + AvailableRegisterAt = 0 + }; + + user.SynchroSlots.Add(new SynchroSlot() + { + Slot = newSlot.Slot, + CharacterSerialNumber = newSlot.Csn, + AvailableAt = newSlot.AvailableRegisterAt + }); + + response.Slot = newSlot; + + JsonDb.Save(); + + await WriteDataAsync(response); + } + } +}