server-master/srcs/WingsAPI.Game.Extensions/ItemExtension/InventoryExtension.cs
2026-02-10 18:21:30 +01:00

37 lines
No EOL
1.9 KiB
C#

using System.Threading.Tasks;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Inventory;
using WingsEmu.Game.Inventory.Event;
using WingsEmu.Game.Items;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
namespace WingsAPI.Game.Extensions.ItemExtension.Inventory
{
public static class InventoryExtension
{
public static int CountMissingItems(this IClientSession session, int itemVNum, short amount) => amount - session.PlayerEntity.CountItemWithVnum(itemVNum);
public static bool HasEnoughGold(this IClientSession session, long gold) => session.PlayerEntity.Gold >= gold;
public static async Task<InventoryItem> AddNewItemToInventory(this IClientSession session, GameItemInstance itemInstance, bool showMessage = false,
ChatMessageColorType colorType = ChatMessageColorType.Green, bool sendGiftIsFull = false, MessageErrorType errorType = MessageErrorType.Chat, short? slot = null,
InventoryType? type = null, bool isByMovePacket = false)
{
var inventoryItem = new InventoryItem
{
InventoryType = type ?? itemInstance.GameItem.Type,
IsEquipped = false,
ItemInstance = itemInstance,
CharacterId = session.PlayerEntity.Id,
Slot = slot ?? session.PlayerEntity.GetNextInventorySlot(type ?? itemInstance.GameItem.Type)
};
await session.EmitEventAsync(new InventoryAddItemEvent(inventoryItem, showMessage, colorType, sendGiftIsFull, errorType, slot, type, isByMovePacket));
return inventoryItem;
}
public static async Task RemoveItemFromInventory(this IClientSession session, int itemVnum = 1, short amount = 1, bool isEquiped = false, InventoryItem item = null, bool sendPackets = true)
=> await session.EmitEventAsync(new InventoryRemoveItemEvent(itemVnum, amount, isEquiped, item, sendPackets));
}
}