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