server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Quicklist/QuicklistSwapEventHandler.cs
2026-02-10 18:21:30 +01:00

48 lines
No EOL
1.7 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsAPI.Game.Extensions.Quicklist;
using WingsEmu.DTOs.Quicklist;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Quicklist;
namespace WingsEmu.Plugins.BasicImplementations.Quicklist;
public class QuicklistSwapEventHandler : IAsyncEventProcessor<QuicklistSwapEvent>
{
public async Task HandleAsync(QuicklistSwapEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
short tab = e.Tab;
short fromSlot = e.FromSlot;
short toSlot = e.ToSlot;
int morphId = session.PlayerEntity.UseSp ? session.PlayerEntity.Specialist?.GameItem.Morph ?? 0 : 0;
CharacterQuicklistEntryDto from = session.PlayerEntity.QuicklistComponent.GetQuicklistByTabSlotAndMorph(tab, fromSlot, morphId);
if (from == null)
{
// incorrect packet
return;
}
session.PlayerEntity.QuicklistComponent.RemoveQuicklist(tab, fromSlot, morphId);
from.QuicklistSlot = toSlot;
CharacterQuicklistEntryDto to = session.PlayerEntity.QuicklistComponent.GetQuicklistByTabSlotAndMorph(tab, toSlot, morphId);
if (to != null)
{
session.PlayerEntity.QuicklistComponent.RemoveQuicklist(tab, toSlot, morphId);
to.QuicklistSlot = fromSlot;
session.PlayerEntity.QuicklistComponent.AddQuicklist(to);
session.SendQuicklistSlot(to);
}
else
{
session.SendEmptyQuicklistSlot(tab, fromSlot);
}
session.PlayerEntity.QuicklistComponent.AddQuicklist(from);
session.SendQuicklistSlot(from);
}
}