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 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 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); } }