public async Task <Unit> Handle(ShowNpcSkillCommand command, CancellationToken cancellationToken) { var playerId = command.PlayerId; var player = await _playerDomainService.Get(playerId); if (player == null) { return(Unit.Value); } var npcId = command.NpcId; var npc = await _npcDomainService.Get(npcId); if (npc == null) { return(Unit.Value); } if (npc.Type != NpcTypeEnum.人物) { await _bus.RaiseEvent(new DomainNotification($"指令 错误!")); return(Unit.Value); } var playerRelation = await _playerRelationDomainService.Get(x => x.Type == PlayerRelationTypeEnum.师父 && x.PlayerId == playerId && x.RelationId == npcId); if (playerRelation == null) { return(Unit.Value); } var npcSkillInfoModel = new NpcSkillInfoModel { Npc = _mapper.Map <NpcBaseInfo>(npc) }; var skillModels = new List <NpcSkillModel>(); var npcSkills = await _npcSkillDomainService.GetAll(npcId); var npcSkillIds = npcSkills?.Select(x => x.SkillId); var mySkills = await _playerSkillDomainService.GetAll(playerId); var skills = (await _skillDomainService.GetAll()).Where(x => npcSkillIds.Contains(x.Id)); foreach (var npcSkill in npcSkills) { var mySkill = mySkills.FirstOrDefault(x => x.SkillId == npcSkill.SkillId); var skill = skills.FirstOrDefault(x => x.Id == npcSkill.SkillId); if (skill != null) { var skillModel = _mapper.Map <NpcSkillModel>(skill); skillModel.ObjectSkillId = npcSkill.Id; skillModel.Level = npcSkill.Level; skillModel.Exp = npcSkill.Exp; skillModel.MyExp = mySkill?.Exp ?? 0; skillModel.MyLevel = mySkill?.Exp ?? 0; skillModels.Add(skillModel); } } npcSkillInfoModel.Skills = skillModels; await _mudProvider.ShowNpcSkill(playerId, npcSkillInfoModel); return(Unit.Value); }