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

59 lines
No EOL
1.6 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
using WingsEmu.Game.SnackFood.Events;
namespace WingsEmu.Plugins.BasicImplementations.Event.Characters;
public class AddAdditionalHpMpEventHandler : IAsyncEventProcessor<AddAdditionalHpMpEvent>
{
public async Task HandleAsync(AddAdditionalHpMpEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
IPlayerEntity character = session.PlayerEntity;
if (!character.IsAlive())
{
return;
}
if (e.Hp != 0)
{
int maxHpOverflow = character.MaxHp * e.MaxHpPercentage / 100;
if (character.AdditionalHp + e.Hp > maxHpOverflow)
{
if (character.AdditionalHp < maxHpOverflow)
{
character.AdditionalHp = maxHpOverflow;
}
}
else
{
character.AdditionalHp += e.Hp;
}
}
if (e.Mp != 0)
{
int maxMpOverflow = character.MaxMp * e.MaxMpPercentage / 100;
if (character.AdditionalMp + e.Mp > maxMpOverflow)
{
if (character.AdditionalMp < maxMpOverflow)
{
character.AdditionalMp = maxMpOverflow;
}
}
else
{
character.AdditionalMp += e.Mp;
}
}
session.SendGuriPacket(4);
}
}