From 74a28297736ca24d57973f82df33fcc534454b11 Mon Sep 17 00:00:00 2001 From: zhumoumoumou <48523823+zhumoumoumou@users.noreply.github.com> Date: Sun, 3 Aug 2025 23:51:09 +0800 Subject: [PATCH] Fix add slots in synchro device. (#49) --- .../Character/SynchroAddSlotByItem.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 EpinelPS/LobbyServer/Character/SynchroAddSlotByItem.cs 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); + } + } +}