64 lines
No EOL
2.1 KiB
C#
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()));
|
|
}
|
|
} |