48 lines
No EOL
1.7 KiB
C#
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);
|
|
}
|
|
} |