Exemplo n.º 1
0
        public async Task ShowFightingSkill()
        {
            var result = await DoCommand(async() => {
                var playerId = _account.PlayerId;

                var command = new ShowFightingSkillCommand(playerId);
                await _bus.SendCommand(command);
            });
        }
Exemplo n.º 2
0
        public async Task <Unit> Handle(ShowFightingSkillCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                return(Unit.Value);
            }

            var myWeapons = await _playerWareDomainService.GetAllWeapon(playerId);

            var myWeaponIds = myWeapons.Select(x => x.WareId);

            var weapons = (await _wareDomainService.GetAll()).Where(x => x.Category == WareCategoryEnum.武器 && myWeaponIds.Contains(x.Id)).ToList();



            var skillModels = new List <SkillModel>();

            var playerSkills = await _playerSkillDomainService.GetAll(player.Id);

            var ids = playerSkills?.Select(x => x.SkillId);

            var skills = (await _skillDomainService.GetAll()).Where(x => x.Category == SkillCategoryEnum.外功 && ids.Contains(x.Id));

            foreach (var playerSkill in playerSkills)
            {
                var skill = skills.FirstOrDefault(x => x.Id == playerSkill.SkillId);
                if (skill != null)
                {
                    switch (skill.Type)
                    {
                    case SkillTypeEnum.刀法:
                        if (weapons.Count(x => x.Type == WareTypeEnum.刀) == 0)
                        {
                            continue;
                        }
                        break;

                    case SkillTypeEnum.剑法:
                        if (weapons.Count(x => x.Type == WareTypeEnum.剑) == 0)
                        {
                            continue;
                        }
                        break;

                    case SkillTypeEnum.枪棍:
                        if (weapons.Count(x => x.Type == WareTypeEnum.枪) == 0)
                        {
                            continue;
                        }
                        break;
                    }

                    var skillModel = _mapper.Map <SkillModel>(skill);
                    skillModel.ObjectSkillId = playerSkill.Id;
                    skillModel.Level         = playerSkill.Level;
                    skillModel.Exp           = playerSkill.Exp;
                    skillModel.IsDefault     = playerSkill.IsDefault;
                    skillModels.Add(skillModel);
                }
            }

            if (skillModels.Count(x => (x.Type == SkillTypeEnum.刀法 || x.Type == SkillTypeEnum.剑法 || x.Type == SkillTypeEnum.枪棍) && x.IsDefault) == 0)
            {
                skillModels.FirstOrDefault(x => x.Type == SkillTypeEnum.拳脚).IsDefault = true;
            }

            await _mudProvider.ShowFightingSkill(playerId, skillModels);

            return(Unit.Value);
        }