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

73 lines
No EOL
2.2 KiB
C#

// WingsEmu
//
// Developed by NosWings Team
using WingsEmu.Game.Battle;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Skills;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.BCards.Handlers;
public class BCardFearSkillHandler : IBCardEffectAsyncHandler
{
private readonly IBuffFactory _buffFactory;
public BCardFearSkillHandler(IBuffFactory buffFactory) => _buffFactory = buffFactory;
public BCardType HandledType => BCardType.FearSkill;
public void Execute(IBCardEffectContext ctx)
{
if (!(ctx.Target is IPlayerEntity character))
{
return;
}
switch (ctx.BCard.SubType)
{
case (byte)AdditionalTypes.FearSkill.MoveAgainstWill:
character.Session.SendOppositeMove(true);
break;
case (byte)AdditionalTypes.FearSkill.TimesUsed:
int buffVnum = ctx.BCard.SecondData;
switch (ctx.BCard.FirstData)
{
case 1:
if (character.ScoutStateType != ScoutStateType.None)
{
return;
}
Buff firstBuff = _buffFactory.CreateBuff(buffVnum, character);
character.AddBuffAsync(firstBuff);
break;
case 2:
if (character.BuffComponent.HasBuff(buffVnum))
{
return;
}
if (character.ScoutStateType != ScoutStateType.FirstState)
{
return;
}
if (!character.BuffComponent.HasBuff(buffVnum - 1))
{
return;
}
Buff secondBuff = _buffFactory.CreateBuff(buffVnum, character);
character.AddBuffAsync(secondBuff);
break;
default:
return;
}
break;
}
}
}