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

62 lines
No EOL
2 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using WingsEmu.Game;
using WingsEmu.Game._NpcDialog;
using WingsEmu.Game._NpcDialog.Event;
using WingsEmu.Game.Maps;
using WingsEmu.Game.Networking;
using WingsEmu.Game.TimeSpaces;
using WingsEmu.Game.TimeSpaces.Events;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.NpcDialogs.TimeSpace;
public class TimeSpaceOnFinishDialogHandler : INpcDialogAsyncHandler
{
public NpcRunType[] NpcRunTypes => new[] { NpcRunType.TIMESPACE_ON_FINISH_DIALOG };
public async Task Execute(IClientSession session, NpcDialogEvent e)
{
if (!session.HasCurrentMapInstance)
{
return;
}
if (!session.PlayerEntity.TimeSpaceComponent.IsInTimeSpaceParty)
{
return;
}
if (session.CurrentMapInstance.MapInstanceType != MapInstanceType.TimeSpaceInstance)
{
return;
}
TimeSpaceParty timeSpace = session.PlayerEntity.TimeSpaceComponent.TimeSpace;
if (timeSpace?.Instance?.PreFinishDialog == null)
{
return;
}
IPortalEntity portal = session.CurrentMapInstance.Portals.FirstOrDefault(s => s.Type == PortalType.TSEnd &&
session.PlayerEntity.PositionY >= s.PositionY - 1 &&
session.PlayerEntity.PositionY <= s.PositionY + 1 &&
session.PlayerEntity.PositionX >= s.PositionX - 1 &&
session.PlayerEntity.PositionX <= s.PositionX + 1);
timeSpace.Instance.PreFinishDialog = null;
if (timeSpace.Instance.PreFinishDialogIsObjective)
{
timeSpace.Instance.PreFinishDialogIsObjective = false;
timeSpace.Instance.TimeSpaceObjective.ConversationsHad++;
await session.EmitEventAsync(new TimeSpaceRefreshObjectiveProgressEvent());
}
await session.EmitEventAsync(new TimeSpaceCheckObjectivesEvent
{
TimeSpaceParty = timeSpace,
PlayerEnteredToEndPortal = portal != null
});
}
}