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

49 lines
No EOL
1.6 KiB
C#

using WingsEmu.Game;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Entities.Event;
using WingsEmu.Game.Managers.StaticData;
namespace WingsEmu.Plugins.BasicImplementations.BCards.Handlers;
public class BCardQuestHandler : IBCardEffectAsyncHandler
{
private readonly IMonsterEntityFactory _monsterEntityFactory;
private readonly INpcMonsterManager _monsterManager;
private readonly IRandomGenerator _randomGenerator;
public BCardQuestHandler(INpcMonsterManager monsterManager, IRandomGenerator randomGenerator, IMonsterEntityFactory monsterEntityFactory)
{
_monsterManager = monsterManager;
_randomGenerator = randomGenerator;
_monsterEntityFactory = monsterEntityFactory;
}
public BCardType HandledType => BCardType.Quest;
public void Execute(IBCardEffectContext ctx)
{
IMonsterData sender;
if (ctx.Sender is IMonsterEntity monsterEntity)
{
sender = monsterEntity;
}
else
{
return;
}
for (int i = 0; i < sender.VNumRequired; i++)
{
int posX = ctx.Sender.PositionX + _randomGenerator.RandomNumber(-1, 1);
int posY = ctx.Sender.PositionY + _randomGenerator.RandomNumber(-1, 1);
IMonsterEntity mapMonster = _monsterEntityFactory.CreateMonster(sender.SpawnMobOrColor, ctx.Sender.MapInstance, new MonsterEntityBuilder
{
IsHostile = true,
IsWalkingAround = true
});
mapMonster.EmitEventAsync(new MapJoinMonsterEntityEvent(mapMonster, (short)posX, (short)posY, true));
}
}
}