server-master/srcs/_plugins/Plugin.Raids/Handlers/RaidObjectiveIncreaseEventHandler.cs
2026-02-10 18:21:30 +01:00

53 lines
No EOL
1.8 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using Plugin.Raids.Const;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Raids;
using WingsEmu.Game.Raids.Events;
using WingsEmu.Packets.Enums.Chat;
namespace Plugin.Raids;
public class RaidObjectiveIncreaseEventHandler : IAsyncEventProcessor<RaidObjectiveIncreaseEvent>
{
private readonly IGameLanguageService _languageService;
public RaidObjectiveIncreaseEventHandler(IGameLanguageService languageService) => _languageService = languageService;
public async Task HandleAsync(RaidObjectiveIncreaseEvent e, CancellationToken cancellation)
{
switch (e.RaidTargetType)
{
case RaidTargetType.Monster:
e.RaidSubInstance.CurrentCompletedTargetMonsters++;
break;
case RaidTargetType.Button:
e.RaidSubInstance.CurrentCompletedTargetButtons++;
break;
default:
throw new ArgumentOutOfRangeException();
}
if (e.RaidSubInstance.TargetsCompleted)
{
e.RaidSubInstance.MapInstance.Broadcast(x => x.GenerateMsgPacket(
_languageService.GetLanguage(GameDialogKey.RAID_SHOUTMESSAGE_TARGETS_COMPLETED, x.UserLanguage), MsgMessageType.Middle));
await e.RaidSubInstance.TriggerEvents(RaidConstEventKeys.ObjectivesCompleted);
}
else
{
e.RaidSubInstance.MapInstance.Broadcast(x => x.GenerateMsgPacket(
_languageService.GetLanguage(GameDialogKey.RAID_SHOUTMESSAGE_TARGETS_UPDATED, x.UserLanguage), MsgMessageType.Middle));
}
foreach (IClientSession member in e.RaidSubInstance.MapInstance.Sessions)
{
member.SendRaidmbf();
}
}
}