server-master/srcs/_plugins/Plugin.Act4/Event/Act4DungeonStopEventHandler.cs
2026-02-10 18:21:30 +01:00

49 lines
No EOL
1.8 KiB
C#

using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Act4;
using WingsEmu.Game.Act4.Configuration;
using WingsEmu.Game.Act4.Event;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Maps;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Revival;
namespace Plugin.Act4.Event;
public class Act4DungeonStopEventHandler : IAsyncEventProcessor<Act4DungeonStopEvent>
{
private readonly IAct4DungeonManager _act4DungeonManager;
private readonly Act4DungeonsConfiguration _act4DungeonsConfiguration;
private readonly IMapManager _mapManager;
public Act4DungeonStopEventHandler(IAct4DungeonManager act4DungeonManager, IMapManager mapManager, Act4DungeonsConfiguration act4DungeonsConfiguration)
{
_act4DungeonManager = act4DungeonManager;
_mapManager = mapManager;
_act4DungeonsConfiguration = act4DungeonsConfiguration;
}
public async Task HandleAsync(Act4DungeonStopEvent e, CancellationToken cancellation)
{
_act4DungeonManager.UnregisterDungeon(e.DungeonInstance);
foreach (DungeonSubInstance subInstance in e.DungeonInstance.DungeonSubInstances.Values)
{
foreach (IClientSession session in subInstance.MapInstance.Sessions.ToList())
{
if (!session.PlayerEntity.IsAlive())
{
await session.EmitEventAsync(new RevivalReviveEvent());
}
session.ChangeMap(_act4DungeonsConfiguration.DungeonReturnPortalMapId, _act4DungeonsConfiguration.DungeonReturnPortalMapX, _act4DungeonsConfiguration.DungeonReturnPortalMapY);
}
_mapManager.RemoveMapInstance(subInstance.MapInstance.Id);
subInstance.MapInstance.Destroy();
}
}
}