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

87 lines
No EOL
2.5 KiB
C#

using System;
using WingsEmu.Core;
using WingsEmu.DTOs.BCards;
using WingsEmu.Game;
using WingsEmu.Game.Act4;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Entities;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.BCards.Handlers;
public class BCardHatusHandler : IBCardEffectAsyncHandler
{
private readonly Range<int> _blue = new()
{
Minimum = 18,
Maximum = 28
};
private readonly IDungeonManager _dungeonManager;
private readonly Range<int> _green = new()
{
Minimum = 44,
Maximum = 54
};
private readonly IRandomGenerator _randomGenerator;
private readonly Range<int> _red = new()
{
Minimum = 31,
Maximum = 41
};
public BCardHatusHandler(IRandomGenerator randomGenerator, IDungeonManager dungeonManager)
{
_randomGenerator = randomGenerator;
_dungeonManager = dungeonManager;
}
public BCardType HandledType => BCardType.LordHatus;
public void Execute(IBCardEffectContext ctx)
{
IBattleEntity sender = ctx.Sender;
BCardDTO bCard = ctx.BCard;
int firstDataValue = bCard.FirstDataValue(sender.Level);
switch ((AdditionalTypes.LordHatus)bCard.SubType)
{
case AdditionalTypes.LordHatus.InflictDamageAtLocation:
int randomNumber = _randomGenerator.RandomNumber(1, 8);
HatusState newHatusState = new()
{
CastTime = TimeSpan.FromMilliseconds(2 * ctx.Skill.CastTime * 100),
DealtDamage = firstDataValue * 0.01
};
// for blue
if ((randomNumber & 1) == 1)
{
newHatusState.BlueAttack = true;
newHatusState.BlueX = (short)_randomGenerator.RandomNumber(_blue.Minimum, _blue.Maximum + 1);
}
// for red
if ((randomNumber & 2) == 2)
{
newHatusState.RedAttack = true;
newHatusState.RedX = (short)_randomGenerator.RandomNumber(_red.Minimum, _red.Maximum + 1);
}
// for green
if ((randomNumber & 4) == 4)
{
newHatusState.GreenAttack = true;
newHatusState.GreenX = (short)_randomGenerator.RandomNumber(_green.Minimum, _green.Maximum + 1);
}
_dungeonManager.AddNewHatusState(sender.MapInstance.Id, newHatusState);
break;
}
}
}