Ejemplo n.º 1
0
        public async Task <Unit> Handle(LoadWareCommand command, CancellationToken cancellationToken)
        {
            var wareId   = command.WareId;
            var playerId = command.PlayerId;

            var player = await _playerDomainService.Get(playerId);

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

                return(Unit.Value);
            }

            var ware = await _wareDomainService.Get(wareId);

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

                return(Unit.Value);
            }


            return(Unit.Value);
        }
Ejemplo n.º 2
0
        public async Task Load(WareAction wareAction)
        {
            var result = await DoCommand(async() => {
                var playerId = _account.PlayerId;

                var command = new LoadWareCommand(playerId, wareAction.MyWareId);
                await _bus.SendCommand(command);
            });
        }
Ejemplo n.º 3
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);
        }