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

42 lines
No EOL
1.5 KiB
C#

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Ship.Event;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.Ship.Event;
public class ShipProcessEventHandler : IAsyncEventProcessor<ShipProcessEvent>
{
private readonly IGameLanguageService _languageService;
public ShipProcessEventHandler(IGameLanguageService languageService) => _languageService = languageService;
public async Task HandleAsync(ShipProcessEvent e, CancellationToken cancellation)
{
if (e.ShipInstance.DepartureWarnings.Count < 1)
{
return;
}
TimeSpan currentWarning = e.ShipInstance.DepartureWarnings.First();
if (e.CurrentTime < e.ShipInstance.LastDeparture + currentWarning)
{
return;
}
e.ShipInstance.DepartureWarnings.Remove(currentWarning);
TimeSpan timeLeft = e.ShipInstance.Configuration.Departure - currentWarning;
bool isSeconds = timeLeft.TotalMinutes < 1;
GameDialogKey key = isSeconds ? GameDialogKey.SHIP_SHOUTMESSAGE_SECONDS_REMAINING : GameDialogKey.SHIP_SHOUTMESSAGE_MINUTES_REMAINING;
e.ShipInstance.MapInstance.Broadcast(x =>
x.GenerateMsgPacket(_languageService.GetLanguageFormat(key, x.UserLanguage, (isSeconds ? timeLeft.Seconds : timeLeft.Minutes).ToString()), MsgMessageType.Middle));
}
}