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

36 lines
No EOL
1.1 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Extensions.Mates;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Mates.Events;
using WingsEmu.Game.Networking;
namespace WingsEmu.Plugins.BasicImplementations.Event.Mates;
public class MateHealEventHandler : IAsyncEventProcessor<MateHealEvent>
{
public async Task HandleAsync(MateHealEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
IMateEntity mateEntity = e.MateEntity;
if (!mateEntity.IsAlive())
{
return;
}
int mateMaxHp = mateEntity.MaxHp;
int mateMaxMp = mateEntity.MaxMp;
int mateHpHeal = mateEntity.Hp + e.HpHeal > mateMaxHp ? mateMaxHp - mateEntity.Hp : e.HpHeal;
int mateMpHeal = mateEntity.Mp + e.MpHeal > mateMaxMp ? mateMaxMp - mateEntity.Mp : e.MpHeal;
mateEntity.Hp += mateHpHeal;
mateEntity.Mp += mateMpHeal;
session.CurrentMapInstance?.Broadcast(mateEntity.GenerateRc(mateHpHeal));
session.SendPacket(mateEntity.GenerateStatInfo());
}
}