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

43 lines
No EOL
1.5 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Algorithm;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Extensions.Mates;
using WingsEmu.Game.Helpers.Damages;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Mates.Events;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.Event.Mates;
public class MateInitializeEventHandler : IAsyncEventProcessor<MateInitializeEvent>
{
private readonly IBattleEntityAlgorithmService _algorithm;
public MateInitializeEventHandler(IBattleEntityAlgorithmService algorithm) => _algorithm = algorithm;
public async Task HandleAsync(MateInitializeEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
IMateEntity mateEntity = e.MateEntity;
mateEntity.Initialize();
mateEntity.RefreshStatistics();
if (e.IsOnCharacterEnter)
{
session.PlayerEntity.MateComponent.AddMate(mateEntity);
return;
}
mateEntity.PetSlot = session.PlayerEntity.GetFreeMateSlot(mateEntity.MateType == MateType.Partner);
session.PlayerEntity.MateComponent.AddMate(mateEntity);
mateEntity.RefreshMaxHpMp(_algorithm);
mateEntity.ChangePosition(new Position(session.PlayerEntity.PositionX, session.PlayerEntity.PositionY));
session.SendPClearPacket();
session.SendScpPackets();
session.SendScnPackets();
}
}