73 lines
No EOL
2.2 KiB
C#
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;
|
|
}
|
|
}
|
|
} |