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

133 lines
No EOL
5.9 KiB
C#

using System.Collections.Generic;
using System.Text;
using WingsAPI.Data.Account;
using WingsEmu.DTOs.Items;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Items;
using WingsEmu.Game.Managers.StaticData;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Warehouse;
using WingsEmu.Packets.Enums;
namespace WingsAPI.Game.Extensions.Warehouse
{
public static class WarehousePacketExtensions
{
#region Warehouse
public static string GenerateStashAll(this IClientSession session, IItemsManager itemsManager, int warehouseSize, IEnumerable<AccountWarehouseItemDto> items)
{
var packet = new StringBuilder($"stash_all {warehouseSize.ToString()}");
foreach (AccountWarehouseItemDto item in items)
{
packet.Append(' ');
packet.Append(item.GenerateStashPacketContent(itemsManager));
}
return packet.ToString();
}
public static void SendStashDynamicItemUpdate(this IClientSession session, IItemsManager itemsManager, AccountWarehouseItemDto item, int slot)
{
if (item == null)
{
session.SendWarehouseRemovePacket(slot);
}
else
{
session.SendStashPacket(itemsManager, item);
}
}
public static string GenerateStashPacketContent(this AccountWarehouseItemDto warehouseItem, IItemsManager itemsManager) =>
GenerateStashSubPacket(itemsManager, warehouseItem.ItemInstance, warehouseItem.Slot);
public static void SendWarehouseStashAll(this IClientSession session, IItemsManager itemsManager, int warehouseSize, IEnumerable<AccountWarehouseItemDto> items)
{
session.SendPacket(session.GenerateStashAll(itemsManager, warehouseSize, items));
}
public static string GenerateEmptyStashPacket(this IClientSession session, int slot) => $"stash {slot.ToString()}.-1.0.0.0";
public static void SendWarehouseRemovePacket(this IClientSession session, int slot) => session.SendPacket(session.GenerateEmptyStashPacket(slot));
public static string GenerateStashPacket(this AccountWarehouseItemDto item, IItemsManager itemsManager) => $"stash {item.GenerateStashPacketContent(itemsManager)}";
public static void SendStashPacket(this IClientSession session, IItemsManager itemsManager, AccountWarehouseItemDto item) => session.SendPacket(item.GenerateStashPacket(itemsManager));
public static string GenerateStashSubPacket(IItemsManager itemsManager, ItemInstanceDTO itemInstanceDto, short slot)
{
IGameItem gameItem = itemsManager.GetItem(itemInstanceDto.ItemVNum);
return GenerateStashSubPacket(itemInstanceDto, gameItem.Type, slot);
}
public static string GenerateStashSubPacket(ItemInstanceDTO itemInstanceDto, InventoryType inventoryType, short slot)
{
var packet = new StringBuilder();
packet.AppendFormat("{0}.{1}.{2}.", slot.ToString(), itemInstanceDto.ItemVNum.ToString(), ((byte)inventoryType).ToString());
switch (inventoryType)
{
case InventoryType.Equipment:
packet.AppendFormat("{0}.{1}.{2}.{3}", itemInstanceDto.Amount.ToString(), itemInstanceDto.Rarity.ToString(), itemInstanceDto.Upgrade.ToString(),
itemInstanceDto.GetRunesCount().ToString());
break;
case InventoryType.Specialist:
packet.AppendFormat("{0}.0.0", itemInstanceDto.Upgrade.ToString());
break;
default:
packet.AppendFormat("{0}.0.0.0", itemInstanceDto.Amount.ToString());
break;
}
return packet.ToString();
}
public static string GenerateStashSubPacket(GameItemInstance itemInstance, short slot) => GenerateStashSubPacket(itemInstance, itemInstance.GameItem.Type, slot);
private static string GenerateStashPacketContent(this WarehouseItem warehouseItem) => GenerateStashSubPacket(warehouseItem.ItemInstance, warehouseItem.Slot);
#endregion
#region PartnerWarehouse
public static void SendAddPartnerWarehouseItem(this IClientSession session, PartnerWarehouseItem item) => session.SendPacket(session.GenerateAddPartnerWarehouseItem(item));
public static void SendRemovePartnerWarehouseItem(this IClientSession session, short slot) => session.SendPacket(session.GenerateRemovePartnerWarehouseItem(slot));
private static string GeneratePStashPacketContent(this PartnerWarehouseItem warehouseItem) => GenerateStashSubPacket(warehouseItem.ItemInstance, warehouseItem.Slot);
public static void RefreshPartnerWarehouseItems(this IClientSession session)
{
session.SendPacket(session.GeneratePStashAll());
session.PlayerEntity.IsPartnerWarehouseOpen = true;
}
public static string GeneratePStashAll(this IClientSession session)
{
var header = new StringBuilder($"pstash_all {session.PlayerEntity.GetPartnerWarehouseSlots()}");
IEnumerable<PartnerWarehouseItem> items = session.PlayerEntity.PartnerWarehouseItems();
foreach (PartnerWarehouseItem item in items)
{
if (item == null)
{
continue;
}
header.Append(' ');
header.Append(item.GeneratePStashPacketContent());
}
return header.ToString();
}
public static string GenerateAddPartnerWarehouseItem(this IClientSession session, PartnerWarehouseItem item) => $"pstash {item.GeneratePStashPacketContent()}";
public static string GenerateRemovePartnerWarehouseItem(this IClientSession session, short slot) => $"pstash {slot.ToString()}.-1.0.0.0";
#endregion
}
}