server-master/srcs/_plugins/Plugin.FamilyImpl/Consumers/FamilyWarehouseItemUpdateMessageConsumer.cs
2026-02-10 18:21:30 +01:00

57 lines
No EOL
2.1 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.ServiceBus;
using Plugin.FamilyImpl.Messages;
using WingsAPI.Data.Families;
using WingsAPI.Game.Extensions.Families;
using WingsAPI.Packets.Enums.Families;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Managers.StaticData;
using WingsEmu.Game.Networking;
namespace Plugin.FamilyImpl.Consumers
{
public class FamilyWarehouseItemUpdateMessageConsumer : IMessageConsumer<FamilyWarehouseItemUpdateMessage>
{
private readonly IFamilyWarehouseManager _familyWarehouseManager;
private readonly IItemsManager _itemsManager;
private readonly ISessionManager _sessionManager;
public FamilyWarehouseItemUpdateMessageConsumer(ISessionManager sessionManager, IItemsManager itemsManager, IFamilyWarehouseManager familyWarehouseManager)
{
_sessionManager = sessionManager;
_itemsManager = itemsManager;
_familyWarehouseManager = familyWarehouseManager;
}
public async Task HandleAsync(FamilyWarehouseItemUpdateMessage notification, CancellationToken token)
{
await _familyWarehouseManager.UpdateWarehouseItem(notification.FamilyId, notification.UpdatedItems);
foreach (IClientSession session in _sessionManager.Sessions)
{
if (!session.PlayerEntity.IsFamilyWarehouseOpen || session.PlayerEntity.Family?.Id != notification.FamilyId)
{
continue;
}
if (!session.CheckPutWithdrawPermission(FamilyWarehouseAuthorityType.Put))
{
continue;
}
foreach ((FamilyWarehouseItemDto dto, short slot) in notification.UpdatedItems)
{
if (dto == null)
{
session.SendFamilyWarehouseRemoveItem(slot);
}
else
{
session.SendFamilyWarehouseAddItem(_itemsManager, dto);
}
}
}
}
}
}