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

64 lines
No EOL
2.1 KiB
C#

using System;
using System.Threading.Tasks;
using WingsAPI.Game.Extensions.Arena;
using WingsEmu.DTOs.Maps;
using WingsEmu.Game._i18n;
using WingsEmu.Game._NpcDialog;
using WingsEmu.Game._NpcDialog.Event;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.NpcDialogs.Arena;
public class JoinArenaHandler : INpcDialogAsyncHandler
{
private readonly IGameLanguageService _langService;
private readonly ISessionManager _sessionManager;
public JoinArenaHandler(IGameLanguageService langService, ISessionManager sessionManager)
{
_langService = langService;
_sessionManager = sessionManager;
}
public long[] HandledIds => new long[] { 17 };
public NpcRunType[] NpcRunTypes => new[] { NpcRunType.ASK_ENTER_ARENA };
public async Task Execute(IClientSession session, NpcDialogEvent e)
{
double timeSpanSinceLastPortal = (DateTime.UtcNow - session.PlayerEntity.LastPortal).TotalSeconds;
if (timeSpanSinceLastPortal < 4 || !session.HasCurrentMapInstance)
{
session.SendChatMessage(_langService.GetLanguage(GameDialogKey.PORTAL_CHATMESSAGE_TOO_EARLY, session.UserLanguage), ChatMessageColorType.Yellow);
return;
}
if (session.PlayerEntity.IsInRaidParty)
{
return;
}
if (session.PlayerEntity.TimeSpaceComponent.IsInTimeSpaceParty)
{
return;
}
bool asksForFamilyArena = e.Argument != 0;
if (session.CantPerformActionOnAct4() || !session.CurrentMapInstance.HasMapFlag(MapFlags.IS_BASE_MAP) || !session.PlayerEntity.IsAlive())
{
return;
}
long cost = ArenaExtensions.GetArenaEntryPrice(asksForFamilyArena);
session.SendQnaPacket($"arena {(asksForFamilyArena ? 1 : 0).ToString()}",
_langService.GetLanguageFormat(asksForFamilyArena ? GameDialogKey.FAMILYARENA_INFO_ASK_ENTER : GameDialogKey.ARENA_INFO_ASK_ENTER, session.UserLanguage, cost.ToString()));
}
}