server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Characters/BankOpenEventHandler.cs
2026-02-10 18:21:30 +01:00

88 lines
No EOL
2.7 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.DTOs.Maps;
using WingsEmu.Game._enum;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Configurations;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Inventory;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.Event.Characters;
public class BankOpenEventHandler : IAsyncEventProcessor<BankOpenEvent>
{
private readonly IBankReputationConfiguration _bankReputationConfiguration;
private readonly IGameLanguageService _gameLanguage;
private readonly IRankingManager _rankingManager;
private readonly IReputationConfiguration _reputationConfiguration;
public BankOpenEventHandler(IGameLanguageService gameLanguage, IReputationConfiguration reputationConfiguration, IBankReputationConfiguration bankReputationConfiguration,
IRankingManager rankingManager)
{
_gameLanguage = gameLanguage;
_reputationConfiguration = reputationConfiguration;
_bankReputationConfiguration = bankReputationConfiguration;
_rankingManager = rankingManager;
}
public async Task HandleAsync(BankOpenEvent e, CancellationToken cancellation)
{
long? npcId = e.NpcId;
InventoryItem bankCard = e.BankCard;
IClientSession session = e.Sender;
if (session.PlayerEntity.IsInExchange())
{
return;
}
if (session.PlayerEntity.HasShopOpened)
{
return;
}
if (session.CantPerformActionOnAct4())
{
return;
}
if (!session.CurrentMapInstance.HasMapFlag(MapFlags.IS_BASE_MAP))
{
return;
}
if (npcId.HasValue)
{
INpcEntity npcEntity = session.CurrentMapInstance.GetNpcById(npcId.Value);
if (npcEntity?.ShopNpc == null)
{
return;
}
if (npcEntity.ShopNpc.ShopType != (byte)NpcShopType.BANK)
{
return;
}
}
else
{
if (bankCard == null)
{
return;
}
await session.RemoveItemFromInventory(item: bankCard);
}
session.SendGbPacket(BankType.OpenBank, _reputationConfiguration, _bankReputationConfiguration, _rankingManager.TopReputation);
session.SendSMemo(SmemoType.BankInfo, session.GetLanguage(GameDialogKey.BANK_LOG_OPEN_BANK));
session.PlayerEntity.IsBankOpen = true;
}
}