public List <Portal> GetMinilandPortals(long characterId) { var nosville = _mapInstanceProvider.GetBaseMapById(1); var oldNosville = _mapInstanceProvider.GetBaseMapById(145); var miniland = _mapInstanceProvider.GetMapInstance(_minilandIds[characterId].MapInstanceId); return(new List <Portal> { new Portal { SourceX = 48, SourceY = 132, DestinationX = 5, DestinationY = 8, Type = PortalType.Miniland, SourceMapId = 1, DestinationMapId = 20001, DestinationMapInstanceId = miniland.MapInstanceId, SourceMapInstanceId = nosville.MapInstanceId }, new Portal { SourceX = 9, SourceY = 171, DestinationX = 5, DestinationY = 8, Type = PortalType.Miniland, SourceMapId = 145, DestinationMapId = 20001, DestinationMapInstanceId = miniland.MapInstanceId, SourceMapInstanceId = oldNosville.MapInstanceId } }); }
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); }
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); } }
/// <summary> /// PreqPacket packet /// </summary> /// <param name="_"></param> public void Preq(PreqPacket _) { if ((SystemTime.Now() - Session.Character.LastPortal).TotalSeconds < 4 || Session.Character.LastPortal > Session.Character.LastMove) { return; } var portal = Session.Character.MapInstance.Portals.Find(port => Heuristic.Octile(Math.Abs(Session.Character.PositionX - port.SourceX), Math.Abs(Session.Character.PositionY - port.SourceY)) <= 1); 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); } }
public void SelectCharacter(SelectPacket selectPacket) { try { if (Session?.Account == null || Session.HasSelectedCharacter) { return; } var characterDto = _characterDao.FirstOrDefault(s => s.AccountId == Session.Account.AccountId && s.Slot == selectPacket.Slot && s.State == CharacterState.Active); if (characterDto == null) { return; } var character = _adapter.Adapt <Character>(characterDto); character.MapInstanceId = _mapInstanceProvider.GetBaseMapInstanceIdByMapId(character.MapId); character.MapInstance = _mapInstanceProvider.GetMapInstance(character.MapInstanceId); character.PositionX = character.MapX; character.PositionY = character.MapY; character.Direction = 2; character.Account = Session.Account; character.Group.JoinGroup(character); Session.SetCharacter(character); var inventories = _itemInstanceDao .Where(s => s.CharacterId == character.CharacterId) .ToList(); inventories.ForEach(k => character.Inventory[k.Id] = _itemProvider.Convert(k)); #pragma warning disable CS0618 Session.SendPackets(Session.Character.GenerateInv()); #pragma warning restore CS0618 if (Session.Character.Hp > Session.Character.HpLoad()) { Session.Character.Hp = (int)Session.Character.HpLoad(); } if (Session.Character.Mp > Session.Character.MpLoad()) { Session.Character.Mp = (int)Session.Character.MpLoad(); } //var relations = // _characterRelationDao.Where(s => s.CharacterId == Session.Character.CharacterId); //var relationsWithCharacter = // _characterRelationDao.Where(s => s.RelatedCharacterId == Session.Character.CharacterId); //var characters = _characterDao // .Where(s => relations.Select(v => v.RelatedCharacterId).Contains(s.CharacterId)).ToList(); //var relatedCharacters = _characterDao.Where(s => // relationsWithCharacter.Select(v => v.RelatedCharacterId).Contains(s.CharacterId)).ToList(); //foreach (var relation in _adapter.Adapt<IEnumerable<CharacterRelation>>(relations)) //{ // relation.CharacterName = characters.Find(s => s.CharacterId == relation.RelatedCharacterId)?.Name; // Session.Character.CharacterRelations[relation.CharacterRelationId] = relation; //} //foreach (var relation in _adapter.Adapt<IEnumerable<CharacterRelation>>(relationsWithCharacter)) //{ // relation.CharacterName = // relatedCharacters.Find(s => s.CharacterId == relation.RelatedCharacterId)?.Name; // Session.Character.RelationWithCharacter[relation.CharacterRelationId] = relation; //} Session.SendPacket(new OkPacket()); } catch (Exception ex) { _logger.Error("Select character failed.", ex); } }
public override void Execute(SelectPacket packet, ClientSession clientSession) { try { if ((clientSession?.Account == null) || clientSession.HasSelectedCharacter) { return; } var characterDto = _characterDao.FirstOrDefault(s => (s.AccountId == clientSession.Account.AccountId) && (s.Slot == packet.Slot) && (s.State == CharacterState.Active)); if (characterDto == null) { return; } var character = _adapter.Adapt <Character>(characterDto); character.MapInstanceId = _mapInstanceProvider.GetBaseMapInstanceIdByMapId(character.MapId); character.MapInstance = _mapInstanceProvider.GetMapInstance(character.MapInstanceId); character.PositionX = character.MapX; character.PositionY = character.MapY; character.Direction = 2; character.Account = clientSession.Account; character.Group.JoinGroup(character); var inventories = _inventoryItemInstanceDao .Where(s => s.CharacterId == character.CharacterId) .ToList(); var ids = inventories.Select(o => o.ItemInstanceId).ToArray(); var items = _itemInstanceDao.Where(s => ids.Contains(s.Id)).ToList(); inventories.ForEach(k => character.InventoryService[k.ItemInstanceId] = InventoryItemInstance.Create(_itemProvider.Convert(items.First(s => s.Id == k.ItemInstanceId)), character.CharacterId, k)); clientSession.SetCharacter(character); #pragma warning disable CS0618 clientSession.SendPackets(clientSession.Character.GenerateInv()); #pragma warning restore CS0618 clientSession.SendPacket(clientSession.Character.GenerateMlobjlst()); if (clientSession.Character.Hp > clientSession.Character.HpLoad()) { clientSession.Character.Hp = (int)clientSession.Character.HpLoad(); } if (clientSession.Character.Mp > clientSession.Character.MpLoad()) { clientSession.Character.Mp = (int)clientSession.Character.MpLoad(); } clientSession.Character.QuicklistEntries = _quickListEntriesDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); clientSession.Character.StaticBonusList = _staticBonusDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); clientSession.Character.Titles = _titleDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); clientSession.SendPacket(new OkPacket()); } catch (Exception ex) { _logger.Error("Select character failed.", ex); } }
public override async Task ExecuteAsync(SelectPacket packet, ClientSession clientSession) { try { if ((clientSession?.Account == null) || clientSession.HasSelectedCharacter) { return; } var characterDto = await _characterDao.FirstOrDefaultAsync(s => (s.AccountId == clientSession.Account.AccountId) && (s.Slot == packet.Slot) && (s.State == CharacterState.Active)).ConfigureAwait(false); if (characterDto == null) { return; } var character = characterDto.Adapt <Character>(); character.MapInstanceId = _mapInstanceProvider.GetBaseMapInstanceIdByMapId(character.MapId); character.MapInstance = _mapInstanceProvider.GetMapInstance(character.MapInstanceId) !; character.PositionX = character.MapX; character.PositionY = character.MapY; character.Direction = 2; character.Script = character.CurrentScriptId != null ? await _scriptDao.FirstOrDefaultAsync(s => s.Id == character.CurrentScriptId).ConfigureAwait(false) : null; character.Group !.JoinGroup(character); var inventories = _inventoryItemInstanceDao .Where(s => s.CharacterId == character.CharacterId) .ToList(); var ids = inventories.Select(o => o.ItemInstanceId).ToArray(); var items = _itemInstanceDao.Where(s => ids.Contains(s !.Id)).ToList(); inventories.ForEach(k => character.InventoryService[k.ItemInstanceId] = InventoryItemInstance.Create(_itemProvider.Convert(items.First(s => s !.Id == k.ItemInstanceId) !), character.CharacterId, k)); await clientSession.SetCharacterAsync(character).ConfigureAwait(false); #pragma warning disable CS0618 await clientSession.SendPacketsAsync(clientSession.Character.GenerateInv()).ConfigureAwait(false); #pragma warning restore CS0618 await clientSession.SendPacketAsync(clientSession.Character.GenerateMlobjlst()).ConfigureAwait(false); if (clientSession.Character.Hp > clientSession.Character.HpLoad()) { clientSession.Character.Hp = (int)clientSession.Character.HpLoad(); } if (clientSession.Character.Mp > clientSession.Character.MpLoad()) { clientSession.Character.Mp = (int)clientSession.Character.MpLoad(); } clientSession.Character.Quests = new ConcurrentDictionary <Guid, CharacterQuest>(_characterQuestDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToDictionary(x => x.Id, x => { var charquest = x.Adapt <CharacterQuest>(); charquest.Quest = _quests.First(s => s.QuestId == charquest.QuestId).Adapt <GameObject.Providers.QuestProvider.Quest>(); charquest.Quest.QuestObjectives = _questObjectives.Where(s => s.QuestId == charquest.QuestId).ToList(); return(charquest); })); clientSession.Character.QuicklistEntries = _quickListEntriesDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); clientSession.Character.StaticBonusList = _staticBonusDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); clientSession.Character.Titles = _titleDao .Where(s => s.CharacterId == clientSession.Character.CharacterId).ToList(); await clientSession.SendPacketAsync(new OkPacket()).ConfigureAwait(false); } catch (Exception ex) { _logger.Error("Select character failed.", ex); } }