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) } }; }
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; }
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); })); }
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 }); }
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()); }
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); }
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); }
private static bool PortalsAreSame(PortalDto p, PortalDto pp) => p.DestinationMapId == pp.DestinationMapId && p.SourceMapId == pp.SourceMapId && p.SourceX == pp.SourceX && p.SourceY == pp.SourceY;
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); }