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

44 lines
No EOL
1.7 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.DTOs.Bonus;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Bazaar.Events;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Maps;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.Bazaar;
public class BazaarOpenUiEventHandler : IAsyncEventProcessor<BazaarOpenUiEvent>
{
private readonly IGameLanguageService _languageService;
public BazaarOpenUiEventHandler(IGameLanguageService languageService) => _languageService = languageService;
public async Task HandleAsync(BazaarOpenUiEvent e, CancellationToken cancellation)
{
if (e.Sender.CurrentMapInstance?.MapInstanceType == MapInstanceType.TimeSpaceInstance)
{
return;
}
CharacterStaticBonusDto medalBonus =
e.Sender.PlayerEntity.GetStaticBonus(x => x.StaticBonusType == StaticBonusType.BazaarMedalGold || x.StaticBonusType == StaticBonusType.BazaarMedalSilver);
if (e.ThroughMedal && medalBonus == null)
{
e.Sender.SendInfo(_languageService.GetLanguage(GameDialogKey.BAZAAR_INFO_NEEDS_MEDAL, e.Sender.UserLanguage));
return;
}
MedalType medal = medalBonus == null ? MedalType.None : medalBonus.StaticBonusType == StaticBonusType.BazaarMedalGold ? MedalType.Gold : MedalType.Silver;
int time = medalBonus == null ? 0 : medalBonus.DateEnd == null ? 999 : (int)(medalBonus.DateEnd.Value - DateTime.UtcNow).TotalHours;
e.Sender.SendMsg(_languageService.GetLanguage(GameDialogKey.BAZAAR_SHOUTMESSAGE_NOTICE_BAZAAR, e.Sender.UserLanguage), MsgMessageType.Middle);
e.Sender.OpenNosBazaarUi(medal, time);
}
}