Пример #1
0
        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);
        }