server-master/srcs/_plugins/WingsEmu.Plugins.PacketHandling/Game/Inventory/MvePacketHandler.cs
2026-02-10 18:21:30 +01:00

58 lines
No EOL
2 KiB
C#

using System.Threading.Tasks;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Inventory;
using WingsEmu.Game.Inventory.Event;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.ClientPackets;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.PacketHandling.Game.Inventory;
public class MvePacketHandler : GenericGamePacketHandlerBase<MvePacket>
{
protected override async Task HandlePacketAsync(IClientSession session, MvePacket mvePacket)
{
if (mvePacket.Slot == mvePacket.DestinationSlot && mvePacket.InventoryType == mvePacket.DestinationInventoryType)
{
return;
}
if (mvePacket.DestinationSlot > session.PlayerEntity.GetInventorySlots(inventoryType: mvePacket.DestinationInventoryType))
{
return;
}
if (session.PlayerEntity.IsInExchange())
{
return;
}
if (session.PlayerEntity.HasShopOpened)
{
return;
}
if (mvePacket.InventoryType != InventoryType.Costume &&
mvePacket.InventoryType != InventoryType.Specialist &&
mvePacket.InventoryType != InventoryType.Equipment)
{
return;
}
if (mvePacket.DestinationInventoryType != InventoryType.Costume &&
mvePacket.DestinationInventoryType != InventoryType.Specialist &&
mvePacket.DestinationInventoryType != InventoryType.Equipment)
{
return;
}
InventoryItem sourceItem = session.PlayerEntity.GetItemBySlotAndType(mvePacket.Slot, mvePacket.InventoryType);
if ((sourceItem == null || sourceItem.ItemInstance.GameItem.ItemType != ItemType.Specialist) && (sourceItem == null || sourceItem.ItemInstance.GameItem.ItemType != ItemType.Fashion))
{
return;
}
await session.EmitEventAsync(new InventoryMoveItemEvent(mvePacket.InventoryType, mvePacket.Slot, (short)sourceItem.ItemInstance.Amount,
mvePacket.DestinationSlot, mvePacket.DestinationInventoryType));
}
}