コード例 #1
0
 public PortalEntity(PortalDto portal) : base(VisualType.Portal, portal.Id)
 {
     Portal     = new PortalComponent(this, portal);
     Components = new Dictionary <Type, IComponent>
     {
         { typeof(PortalComponent), Portal },
         { typeof(VisibilityComponent), new VisibilityComponent(this) }
     };
 }
コード例 #2
0
ファイル: PortalComponent.cs プロジェクト: popalex/SaltyEmu
 public PortalComponent(IEntity entity, PortalDto dto)
 {
     Entity              = entity;
     PortalId            = dto.Id;
     Type                = dto.Type;
     DestinationMapLayer = null;
     DestinationMapId    = dto.DestinationMapId;
     DestinationX        = dto.DestinationX;
     DestinationY        = dto.DestinationY;
     SourceX             = dto.SourceX;
     SourceY             = dto.SourceY;
     IsDisabled          = dto.IsDisabled;
 }
コード例 #3
0
 public ResultDto UpdatePortal(PortalDto portalDto)
 {
     return(Result(() =>
     {
         var command = new UpdatePortalCommand
         {
             Name = portalDto.Title,
             Title = portalDto.Title,
             Description = portalDto.Description,
             SettingsDto = portalDto.Settings,
         };
         CommandDispatcher.SendWithTransaction(command);
     }));
 }
コード例 #4
0
        protected override async Task Handle(PreqPacket packet, IPlayerEntity player)
        {
            PortalDto currentPortal = player.CurrentMap.Map.GetPortalFromPosition(player.Position.X, player.Position.Y);

            if (currentPortal == null)
            {
                Log.Warn($"Cannot find a valid portal at {player.Position.X}x{player.Position.Y} (Map ID: {player.Character.MapId}.");
                return;
            }

            await player.EmitEventAsync(new PortalTriggerEvent
            {
                Portal = currentPortal
            });
        }
コード例 #5
0
        public List <PortalDto> GetPortals()
        {
            IEnumerable <PortalInfo> portals = (new PortalController()).GetPortals().Cast <PortalInfo>();
            var listItems = new List <PortalDto>();

            foreach (var item in portals)
            {
                var li = new PortalDto()
                {
                    Text     = item.PortalName,
                    PortalId = item.PortalID
                };
                listItems.Add(li);
            }
            return(listItems.OrderBy(x => x.Text).ToList());
        }
コード例 #6
0
        protected override Task Handle(PortalTriggerEvent e, CancellationToken cancellation)
        {
            // todo check portal state
            if (!(e.Sender is IPlayerEntity session))
            {
                return(Task.CompletedTask);
            }

            PortalDto currentPortal = e.Portal;

            session.Position.X = currentPortal.DestinationX;
            session.Position.Y = currentPortal.DestinationY;
            IMapLayer destinationMap = _mapManager.GetBaseMapLayer(currentPortal.DestinationMapId);

            if (destinationMap == null)
            {
                Log.Warn($"Cannot find map with id: {currentPortal.DestinationMapId}.");
                return(Task.CompletedTask);
            }

            session.TransferEntity(destinationMap);
            return(Task.CompletedTask);
        }
コード例 #7
0
ファイル: PortalParser.cs プロジェクト: serhocanszd/NosCore
        public void InsertPortals(List <string[]> packetList)
        {
            var   portalsdb     = _portalDao.LoadAll().ToList();
            var   _maps         = _mapDao.LoadAll().ToList();
            short map           = 0;
            var   portalCounter = 0;
            var   lodPortal     = new PortalDto
            {
                SourceMapId      = 150,
                SourceX          = 172,
                SourceY          = 171,
                DestinationMapId = 98,
                Type             = PortalType.MapPortal,
                DestinationX     = 6,
                DestinationY     = 36,
                IsDisabled       = false
            };
            var portalsave4 = lodPortal;

            if (portalsdb.FirstOrDefault(s => s.SourceMapId == portalsave4.SourceMapId) ==
                null)
            {
                portalCounter++;
                _portalDao.InsertOrUpdate(ref lodPortal);
            }

            var minilandPortal = new PortalDto
            {
                SourceMapId      = 20001,
                SourceX          = 3,
                SourceY          = 8,
                DestinationMapId = 1,
                Type             = PortalType.MapPortal,
                DestinationX     = 48,
                DestinationY     = 132,
                IsDisabled       = false
            };

            var portalsave3 = minilandPortal;

            if (portalsdb.FirstOrDefault(s => s.SourceMapId == portalsave3.SourceMapId) ==
                null)
            {
                portalCounter++;
                _portalDao.InsertOrUpdate(ref minilandPortal);
            }

            var weddingPortal = new PortalDto
            {
                SourceMapId      = 2586,
                SourceX          = 34,
                SourceY          = 54,
                DestinationMapId = 145,
                Type             = PortalType.MapPortal,
                DestinationX     = 61,
                DestinationY     = 165,
                IsDisabled       = false
            };
            var portalsave2 = weddingPortal;

            if (portalsdb.FirstOrDefault(s => s.SourceMapId == portalsave2.SourceMapId) ==
                null)
            {
                portalCounter++;
                _portalDao.InsertOrUpdate(ref weddingPortal);
            }

            var glacerusCavernPortal = new PortalDto
            {
                SourceMapId      = 2587,
                SourceX          = 42,
                SourceY          = 3,
                DestinationMapId = 189,
                Type             = PortalType.MapPortal,
                DestinationX     = 48,
                DestinationY     = 156,
                IsDisabled       = false
            };
            var portalsave1 = glacerusCavernPortal;

            if (portalsdb.FirstOrDefault(s => s.SourceMapId == portalsave1.SourceMapId) ==
                null)
            {
                portalCounter++;
                _portalDao.InsertOrUpdate(ref glacerusCavernPortal);
            }

            foreach (var currentPacket in packetList.Where(o => o[0].Equals("at") || o[0].Equals("gp")))
            {
                if ((currentPacket.Length > 5) && (currentPacket[0] == "at"))
                {
                    map = short.Parse(currentPacket[2]);
                    continue;
                }

                if ((currentPacket.Length <= 4) || (currentPacket[0] != "gp"))
                {
                    continue;
                }

                var portal = new PortalDto
                {
                    SourceMapId      = map,
                    SourceX          = short.Parse(currentPacket[1]),
                    SourceY          = short.Parse(currentPacket[2]),
                    DestinationMapId = short.Parse(currentPacket[3]),
                    Type             = (PortalType)Enum.Parse(typeof(PortalType), currentPacket[4]),
                    DestinationX     = -1,
                    DestinationY     = -1,
                    IsDisabled       = false
                };

                if (_listPortals1.Any(s =>
                                      (s.SourceMapId == map) && (s.SourceX == portal.SourceX) && (s.SourceY == portal.SourceY) &&
                                      (s.DestinationMapId == portal.DestinationMapId)) ||
                    _maps.All(s => s.MapId != portal.SourceMapId) ||
                    _maps.All(s => s.MapId != portal.DestinationMapId))
                {
                    // Portal already in list
                    continue;
                }

                _listPortals1.Add(portal);
            }

            _listPortals1 = _listPortals1.OrderBy(s => s.SourceMapId).ThenBy(s => s.DestinationMapId)
                            .ThenBy(s => s.SourceY).ThenBy(s => s.SourceX).ToList();
            foreach (var portal in _listPortals1)
            {
                var p = _listPortals1.Except(_listPortals2).FirstOrDefault(s =>
                                                                           (s.SourceMapId == portal.DestinationMapId) && (s.DestinationMapId == portal.SourceMapId));
                if (p == null)
                {
                    continue;
                }

                portal.DestinationX = p.SourceX;
                portal.DestinationY = p.SourceY;
                p.DestinationY      = portal.SourceY;
                p.DestinationX      = portal.SourceX;
                _listPortals2.Add(p);
                _listPortals2.Add(portal);
            }


            // so this dude doesnt exist yet in DAOFactory -> insert it
            var portalsDtos = _listPortals2.Where(portal => !portalsdb
                                                  .Where(s => s.SourceMapId.Equals(portal.SourceMapId)).Any(
                                                      s => (s.DestinationMapId == portal.DestinationMapId) && (s.SourceX == portal.SourceX) &&
                                                      (s.SourceY == portal.SourceY))).ToList();

            _portalDao.InsertOrUpdate(portalsDtos);

            _logger.Information(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.PORTALS_PARSED),
                                portalsDtos.Count + portalCounter);
        }
コード例 #8
0
 private static bool PortalsAreSame(PortalDto p, PortalDto pp) =>
 p.DestinationMapId == pp.DestinationMapId &&
 p.SourceMapId == pp.SourceMapId &&
 p.SourceX == pp.SourceX &&
 p.SourceY == pp.SourceY;
コード例 #9
0
        public void Generate(string filePath)
        {
            var portalService = ChickenContainer.Instance.Resolve <IPortalService>();

            IEnumerable <PortalDto> portals    = portalService.Get();
            IEnumerable <PortalDto> portalDtos = portals as PortalDto[] ?? portals.ToArray();

            _sourcePortals.AddRange(portalDtos);

            string[] lines = File.ReadAllText(filePath, Encoding.UTF8).Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
            short    map   = 0;

            foreach (string line in lines)
            {
                string[] currentPacket = line.Split('\t', ' ');
                switch (currentPacket[0])
                {
                case "at":
                    map = short.Parse(currentPacket[2]);
                    break;

                case "gp":
                    var portal = new PortalDto
                    {
                        SourceMapId      = map,
                        SourceX          = short.Parse(currentPacket[1]),
                        SourceY          = short.Parse(currentPacket[2]),
                        DestinationMapId = short.Parse(currentPacket[3]),
                        Type             = Enum.Parse <PortalType>(currentPacket[4]),
                        DestinationX     = -1,
                        DestinationY     = -1,
                        IsDisabled       = false
                    };
                    if (_sourcePortals.Any(s => PortalsAreSame(s, portal)))
                    {
                        break;
                    }

                    _sourcePortals.Add(portal);
                    break;
                }
            }

            foreach (PortalDto pp in _sourcePortals)
            {
                PortalDto p = _sourcePortals.Except(_destinationPortals).FirstOrDefault(s => s.SourceMapId == pp.DestinationMapId && s.DestinationMapId == pp.SourceMapId);
                if (p == null)
                {
                    continue;
                }

                pp.DestinationX = p.SourceX;
                pp.DestinationY = p.SourceY;
                p.DestinationY  = pp.SourceY;
                p.DestinationX  = pp.SourceX;
                _destinationPortals.Add(p);
                _destinationPortals.Add(pp);
            }

            IEnumerable <PortalDto> portalsToSave = _destinationPortals.Where(
                ppa => !portalService.GetByMapId(ppa.SourceMapId).Any(s => PortalsAreSame(s, ppa))).OrderBy(s => s.SourceMapId).ThenBy(s => s.DestinationMapId).ThenBy(s => s.SourceY)
                                                    .ThenBy(s => s.SourceX).ToArray();

            portalService.Save(portalsToSave);
        }