Exemplo n.º 1
0
        public override async Task ExecuteAsync(PreqPacket _, ClientSession session)
        {
            if (((SystemTime.Now() - session.Character.LastPortal).TotalSeconds < 4) ||
                (session.Character.LastPortal > session.Character.LastMove))
            {
                await session.SendPacketAsync(session.Character.GenerateSay(
                                                  GameLanguage.Instance.GetMessageFromKey(LanguageKey.PORTAL_DELAY, session.Account.Language),
                                                  SayColorType.Yellow)).ConfigureAwait(false);

                return;
            }

            var portals = new List <Portal>();

            portals.AddRange(session.Character.MapInstance.Portals);
            portals.AddRange(_minilandProvider
                             .GetMinilandPortals(session.Character.CharacterId)
                             .Where(s => s.SourceMapInstanceId == session.Character.MapInstanceId));
            var portal = portals.Find(port =>
                                      _distanceCalculator.GetDistance(new MapCell
            {
                X = session.Character.PositionX,
                Y = session.Character.PositionY
            }, new MapCell
            {
                X = port.SourceX,
                Y = port.SourceY
            })
                                      <= 2);

            if (portal == null)
            {
                return;
            }

            if (portal.DestinationMapInstanceId == default)
            {
                return;
            }

            session.Character.LastPortal = SystemTime.Now();

            if ((_mapInstanceProvider.GetMapInstance(portal.SourceMapInstanceId) !.MapInstanceType
                 != MapInstanceType.BaseMapInstance) &&
                (_mapInstanceProvider.GetMapInstance(portal.DestinationMapInstanceId) !.MapInstanceType
                 == MapInstanceType.BaseMapInstance))
            {
                await session.ChangeMapAsync(session.Character.MapId, session.Character.MapX, session.Character.MapY).ConfigureAwait(false);
            }
Exemplo n.º 2
0
        public override void Execute(PreqPacket _, ClientSession session)
        {
            if (((SystemTime.Now() - session.Character.LastPortal).TotalSeconds < 4) ||
                (session.Character.LastPortal > session.Character.LastMove))
            {
                session.SendPacket(session.Character.GenerateSay(
                                       Language.Instance.GetMessageFromKey(LanguageKey.PORTAL_DELAY, session.Account.Language),
                                       SayColorType.Yellow));
                return;
            }

            var portals = new List <Portal>();

            portals.AddRange(session.Character.MapInstance.Portals);
            portals.AddRange(_minilandProvider
                             .GetMinilandPortals(session.Character.CharacterId)
                             .Where(s => s.SourceMapInstanceId == session.Character.MapInstanceId));
            var portal = portals.Find(port =>
                                      Heuristic.Octile(Math.Abs(session.Character.PositionX - port.SourceX),
                                                       Math.Abs(session.Character.PositionY - port.SourceY)) <= 2);

            if (portal == null)
            {
                return;
            }

            if (portal.DestinationMapInstanceId == default)
            {
                return;
            }

            session.Character.LastPortal = SystemTime.Now();

            if ((_mapInstanceProvider.GetMapInstance(portal.SourceMapInstanceId).MapInstanceType
                 != MapInstanceType.BaseMapInstance) &&
                (_mapInstanceProvider.GetMapInstance(portal.DestinationMapInstanceId).MapInstanceType
                 == MapInstanceType.BaseMapInstance))
            {
                session.ChangeMap(session.Character.MapId, session.Character.MapX, session.Character.MapY);
            }
            else
            {
                session.ChangeMapInstance(portal.DestinationMapInstanceId, portal.DestinationX,
                                          portal.DestinationY);
            }
        }