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

56 lines
No EOL
1.8 KiB
C#

using WingsEmu.Game;
using WingsEmu.Game._enum;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Entities;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.BCards.Handlers;
public class BCardTimeTwisterHandler : IBCardEffectAsyncHandler
{
private readonly IBuffFactory _buffFactory;
private readonly IRandomGenerator _randomGenerator;
public BCardTimeTwisterHandler(IRandomGenerator randomGenerator, IBuffFactory buffFactory)
{
_randomGenerator = randomGenerator;
_buffFactory = buffFactory;
}
public BCardType HandledType => BCardType.AbsorbedSpirit;
public void Execute(IBCardEffectContext ctx)
{
IBattleEntity sender = ctx.Sender;
byte subType = ctx.BCard.SubType;
int firstData = ctx.BCard.FirstData;
int secondData = ctx.BCard.SecondData;
if (_randomGenerator.RandomNumber() > firstData)
{
return;
}
switch (subType)
{
case (byte)AdditionalTypes.AbsorbedSpirit.ApplyEffectIfPresent:
if (!sender.BuffComponent.HasBuff((short)BuffVnums.SPIRIT_ABSORPTION))
{
return;
}
sender.AddBuffAsync(_buffFactory.CreateBuff(secondData, sender)).ConfigureAwait(false).GetAwaiter().GetResult();
break;
case (byte)AdditionalTypes.AbsorbedSpirit.ApplyEffectIfNotPresent:
if (sender.BuffComponent.HasBuff((short)BuffVnums.SPIRIT_ABSORPTION))
{
return;
}
sender.AddBuffAsync(_buffFactory.CreateBuff(secondData, sender)).ConfigureAwait(false).GetAwaiter().GetResult();
break;
}
}
}