Exemple #1
0
        private async Task <WareModel> Computed(WareEntity ware, PlayerWareEntity playerWare)
        {
            var wareModel = _mapper.Map <WareModel>(ware);

            wareModel.PlayerWareId = playerWare.Id;
            wareModel.Number       = playerWare.Number;
            wareModel.Status       = playerWare.Status;

            var wareEffectAttr = new WareEffectAttr();
            var effects        = JsonConvert.DeserializeObject <List <WareEffect> >(ware.Effect);

            foreach (var effect in effects)
            {
                foreach (var attr in effect.Attrs)
                {
                    int.TryParse(attr.Val, out int val);

                    switch (attr.Attr)
                    {
                    case "Atk":
                        wareEffectAttr.Atk += val;
                        break;

                    case "Def":
                        wareEffectAttr.Def += val;
                        break;

                    case "Hp":
                        wareEffectAttr.Hp += val;
                        break;

                    case "Mp":
                        wareEffectAttr.Mp += val;
                        break;
                    }
                }
            }

            wareModel.WareEffect = wareEffectAttr;

            return(await Task.FromResult(wareModel));
        }
Exemple #2
0
        public async Task Delete(WareEntity entity)
        {
            await _wareRepository.Remove(entity);

            await _bus.RaiseEvent(new EntityDeletedEvent <WareEntity>(entity)).ConfigureAwait(false);
        }
Exemple #3
0
 public async Task Add(WareEntity entity)
 {
     await _wareRepository.Add(entity);
 }
Exemple #4
0
        public async Task <Unit> Handle(LoadWareCommand command, CancellationToken cancellationToken)
        {
            var myWareId = command.MyWareId;
            var playerId = command.PlayerId;

            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"角色不存在!"));

                return(Unit.Value);
            }

            var playerWare = await _playerWareDomainService.Get(myWareId);

            if (playerWare == null || playerWare.PlayerId != playerId)
            {
                await _bus.RaiseEvent(new DomainNotification($"武器不存在!"));

                return(Unit.Value);
            }

            if (playerWare.Status == WareStatusEnum.装备)
            {
                await _bus.RaiseEvent(new DomainNotification($"武器已装备!"));

                return(Unit.Value);
            }

            var ware = await _wareDomainService.Get(playerWare.WareId);

            if (ware == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"武器状态异常!"));

                return(Unit.Value);
            }


            var playerWares = await _playerWareDomainService.GetAll(playerId);

            var ids       = playerWares.Where(x => x.Status == WareStatusEnum.装备).Select(x => x.WareId).ToList();
            var wareQuery = await _wareDomainService.GetAll();

            var wares = wareQuery.Where(x => ids.Contains(x.Id));

            WareTypeEnum[] wareTypes = null;
            WareEntity     loadWare  = null;

            switch (ware.Type)
            {
            case WareTypeEnum.刀:
            case WareTypeEnum.剑:
            case WareTypeEnum.枪:
                wareTypes = new[] { WareTypeEnum.刀, WareTypeEnum.剑, WareTypeEnum.枪 };
                break;

            case WareTypeEnum.衣服:
                wareTypes = new[] { WareTypeEnum.衣服 };
                break;

            case WareTypeEnum.鞋:
                wareTypes = new[] { WareTypeEnum.鞋 };
                break;

            case WareTypeEnum.帽:
                wareTypes = new[] { WareTypeEnum.帽 };
                break;
            }
            if (wareTypes != null)
            {
                loadWare = wares.FirstOrDefault(x => wareTypes.Contains(x.Type));
            }

            if (loadWare != null)
            {
                await _bus.RaiseEvent(new DomainNotification($"你已经装备了 [{loadWare.Name}]!"));

                return(Unit.Value);
            }


            playerWare.Status = WareStatusEnum.装备;
            await _playerWareDomainService.Update(playerWare);

            var wareEffectAttr = await Computed(playerId);

            player.Atk = wareEffectAttr.Atk;
            player.Def = wareEffectAttr.Def;

            await _playerDomainService.Update(player);

            /*
             * var wareModel = _mapper.Map<WareModel>(ware);
             * wareModel.PlayerWareId = playerWare.Id;
             * wareModel.Number = playerWare.Number;
             * wareModel.Status = playerWare.Status;
             * await _mudProvider.LoadWare(playerId, wareModel);
             */

            var wareModel = await Computed(ware, playerWare);

            await _mudProvider.ShowWare(playerId, wareModel);

            await _mudProvider.ShowMessage(playerId, $"你装备了 [{wareModel.Name}]!");

            return(Unit.Value);
        }
Exemple #5
0
        public async Task <Unit> Handle(ShowMyWeaponCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

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

            var parts = new List <WarePartEnum>()
            {
                WarePartEnum.头部,
                WarePartEnum.武器,
                WarePartEnum.衣服,
                WarePartEnum.裤子,
                WarePartEnum.腰带,
                WarePartEnum.鞋子
            };

            List <Weapon> myWeapons = new List <Weapon>();

            var playerWares = await _playerWareDomainService.GetAll(player.Id);

            var ids = playerWares?.Where(x => x.Status == WareStatusEnum.装备).Select(x => x.WareId);

            var wares = (await _wareDomainService.GetAll()).Where(x => ids.Contains(x.Id));

            foreach (var part in parts)
            {
                WareEntity ware = null;
                switch (part)
                {
                case WarePartEnum.头部:
                    ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.帽);
                    break;

                case WarePartEnum.武器:
                    ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.刀 || x.Type == WareTypeEnum.剑 || x.Type == WareTypeEnum.枪);

                    break;

                case WarePartEnum.腰带:
                    //ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.帽);
                    break;

                case WarePartEnum.衣服:
                    ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.衣服);
                    break;

                case WarePartEnum.裤子:
                    // ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.);
                    break;

                case WarePartEnum.鞋子:
                    ware = wares.FirstOrDefault(x => x.Type == WareTypeEnum.鞋);
                    break;
                }

                var weapon = new Weapon {
                    Part = part.ToString()
                };
                if (ware != null)
                {
                    weapon.Ware = _mapper.Map <WareModel>(ware);
                }
                myWeapons.Add(weapon);
            }

            await _mudProvider.ShowMyWeapon(playerId, myWeapons);

            return(Unit.Value);
        }