server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/NpcDialogs/Teleport/TeleportSpRockHandler.cs
2026-02-10 18:21:30 +01:00

54 lines
No EOL
1.6 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using Serilog;
using WingsEmu.Game._enum;
using WingsEmu.Game._NpcDialog;
using WingsEmu.Game._NpcDialog.Event;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Maps;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.NpcDialogs.Teleport;
public class TeleportSpRockHandler : INpcDialogAsyncHandler
{
private readonly IMapManager _mapManager;
private readonly HashSet<int> _spMapIds = new()
{
(int)MapIds.SP_STONE_PAJAMA,
(int)MapIds.SP_STONE_1,
(int)MapIds.SP_STONE_2,
(int)MapIds.SP_STONE_3,
(int)MapIds.SP_STONE_4
};
public TeleportSpRockHandler(IMapManager mapManager) => _mapManager = mapManager;
public NpcRunType[] NpcRunTypes => new[] { NpcRunType.QUEST_TELEPORT_TO_SP_MAP };
public async Task Execute(IClientSession session, NpcDialogEvent e)
{
IMapInstance mapInstance = _mapManager.GetBaseMapInstanceByMapId(e.Argument);
if (mapInstance == null)
{
Log.Debug($"There was not a map found for VNum {e.Argument.ToString()}");
return;
}
if (session.CantPerformActionOnAct4())
{
return;
}
if (!_spMapIds.Contains(mapInstance.MapId))
{
await session.NotifyStrangeBehavior(StrangeBehaviorSeverity.ABUSING, "Tried to teleport on different map than SP Stone");
return;
}
await _mapManager.TeleportOnRandomPlaceInMapAsync(session, mapInstance);
}
}