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

40 lines
No EOL
1.4 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Entities.Extensions;
using WingsEmu.Game.Monster.Event;
using WingsEmu.Game.TimeSpaces;
using WingsEmu.Game.TimeSpaces.Events;
using WingsEmu.Packets.Enums;
namespace Plugin.TimeSpaces.Handlers;
public class TimeSpaceDespawnMonstersInRoomEventHandler : IAsyncEventProcessor<TimeSpaceDespawnMonstersInRoomEvent>
{
private readonly IAsyncEventPipeline _asyncEventPipeline;
public TimeSpaceDespawnMonstersInRoomEventHandler(IAsyncEventPipeline asyncEventPipeline) => _asyncEventPipeline = asyncEventPipeline;
public async Task HandleAsync(TimeSpaceDespawnMonstersInRoomEvent e, CancellationToken cancellation)
{
TimeSpaceSubInstance timeSpaceSubInstance = e.TimeSpaceSubInstance;
if (timeSpaceSubInstance == null)
{
return;
}
timeSpaceSubInstance.Task?.MonstersAfterTaskStart.Clear();
timeSpaceSubInstance.SpawnAfterMobsKilled.Clear();
foreach (IMonsterEntity monster in timeSpaceSubInstance.MapInstance.GetAliveMonsters(x => x.SummonerType is not VisualType.Player))
{
monster.MapInstance.Broadcast(monster.GenerateOut());
await _asyncEventPipeline.ProcessEventAsync(new MonsterDeathEvent(monster)
{
IsByCommand = true
});
}
}
}