49 lines
No EOL
1.6 KiB
C#
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));
|
|
}
|
|
}
|
|
} |