59 lines
No EOL
1.6 KiB
C#
59 lines
No EOL
1.6 KiB
C#
// WingsEmu
|
|
//
|
|
// Developed by NosWings Team
|
|
|
|
using WingsEmu.DTOs.BCards;
|
|
using WingsEmu.Game.Buffs;
|
|
using WingsEmu.Game.Characters.Events;
|
|
using WingsEmu.Game.Entities;
|
|
using WingsEmu.Game.Extensions;
|
|
using WingsEmu.Packets.Enums;
|
|
|
|
namespace WingsEmu.Plugins.BasicImplementations.BCards.Handlers;
|
|
|
|
public class BCardDrainHandler : IBCardEffectAsyncHandler
|
|
{
|
|
public BCardType HandledType => BCardType.Drain;
|
|
|
|
public void Execute(IBCardEffectContext ctx)
|
|
{
|
|
IBattleEntity target = ctx.Target;
|
|
IBattleEntity sender = ctx.Sender;
|
|
byte subType = ctx.BCard.SubType;
|
|
BCardDTO bCard = ctx.BCard;
|
|
|
|
int firstDataValue = bCard.FirstDataValue(sender.Level);
|
|
|
|
switch ((AdditionalTypes.Drain)subType)
|
|
{
|
|
case AdditionalTypes.Drain.TransferEnemyHPNegated:
|
|
case AdditionalTypes.Drain.TransferEnemyHP:
|
|
if (target.Hp - firstDataValue <= 0)
|
|
{
|
|
if (target.Hp != 1)
|
|
{
|
|
target.BroadcastDamage(target.Hp);
|
|
}
|
|
|
|
target.Hp = 1;
|
|
}
|
|
else
|
|
{
|
|
target.BroadcastDamage(firstDataValue);
|
|
target.Hp -= firstDataValue;
|
|
}
|
|
|
|
if (sender.MapInstance?.Id != target.MapInstance?.Id)
|
|
{
|
|
return;
|
|
}
|
|
|
|
sender.EmitEvent(new BattleEntityHealEvent
|
|
{
|
|
Entity = sender,
|
|
HpHeal = firstDataValue
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
} |