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

40 lines
No EOL
1.4 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Entities.Event;
using WingsEmu.Game.Entities.Extensions;
using WingsEmu.Game.Helpers.Damages;
namespace WingsEmu.Plugins.BasicImplementations.Entities;
public class MapJoinNpcEntityEventHandler : IAsyncEventProcessor<MapJoinNpcEntityEvent>
{
private readonly IRandomGenerator _randomGenerator;
public MapJoinNpcEntityEventHandler(IRandomGenerator randomGenerator) => _randomGenerator = randomGenerator;
public async Task HandleAsync(MapJoinNpcEntityEvent e, CancellationToken cancellation)
{
INpcEntity npcEntity = e.NpcEntity;
if (npcEntity.MapInstance != null)
{
// await npcEntity.EmitEventAsync(new MapLeaveNpcEntityEvent(npcEntity));
}
short x = e.MapX ?? npcEntity.PositionX;
short y = e.MapY ?? npcEntity.PositionY;
npcEntity.ChangePosition(new Position(x, y));
npcEntity.FirstX = x;
npcEntity.FirstY = y;
npcEntity.NextTick = DateTime.UtcNow;
npcEntity.NextTick += TimeSpan.FromMilliseconds(_randomGenerator.RandomNumber(1000));
npcEntity.NextAttackReady = DateTime.UtcNow;
npcEntity.MapInstance?.AddNpc(npcEntity);
string inPacket = npcEntity.GenerateIn();
npcEntity.MapInstance?.Broadcast(inPacket);
}
}