コード例 #1
0
        public async Task BuyStoreWare(ShowStoreWareAction showStoreWareAction)
        {
            var result = await DoCommand(async() => {
                var playerId = _account.PlayerId;

                var command = new BuyStoreWareCommand(playerId, showStoreWareAction.Id, showStoreWareAction.Number);
                await _bus.SendCommand(command);
            });
        }
コード例 #2
0
ファイル: WareCommandHandler.cs プロジェクト: xuebai5/emud
        public async Task <Unit> Handle(BuyStoreWareCommand command, CancellationToken cancellationToken)
        {
            var playerId    = command.PlayerId;
            var storeWareId = command.StoreWareId;
            var number      = command.Number;

            var player = await _playerDomainService.Get(playerId);

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

                return(Unit.Value);
            }

            var storeWare = await _storeWareDomainService.Get(storeWareId);

            if (storeWare == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"物品不存在!"));

                return(Unit.Value);
            }


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

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

                return(Unit.Value);
            }



            int money = storeWare.Price * number;

            switch (storeWare.PriceType)
            {
            case PriceTypeEnum.点券:
                await _bus.RaiseEvent(new DomainNotification($"该物品无法购买!"));

                break;

            case PriceTypeEnum.元宝:
                await _bus.RaiseEvent(new DomainNotification($"该物品无法购买!"));

                break;

            case PriceTypeEnum.银两:
                if (player.Money < money)
                {
                    await _bus.RaiseEvent(new DomainNotification($"先去赚点钱吧!"));

                    return(Unit.Value);
                }

                player.Money -= money;

                break;
            }

            await _playerDomainService.Update(player);

            var isStack = true;

            if (ware.Category == WareCategoryEnum.装 || ware.Category == WareCategoryEnum.武器)
            {
                isStack = false;
            }

            var newPlayerWare = new PlayerWareEntity
            {
                PlayerId = playerId,
                Damage   = 0,
                IsBind   = false,
                IsTemp   = false,
                Level    = 0,
                Number   = number,
                Status   = WareStatusEnum.卸下,
                WareId   = ware.Id,
                WareName = ware.Name
            };

            if (isStack)
            {
                var playerWare = await _playerWareDomainService.Get(x => x.PlayerId == playerId && x.WareId == ware.Id);

                if (playerWare == null)
                {
                    await _playerWareDomainService.Add(newPlayerWare);
                }
                else
                {
                    playerWare.Number   += number;
                    playerWare.WareName += ware.Name;
                    await _playerWareDomainService.Update(playerWare);
                }
            }
            else
            {
                await _playerWareDomainService.Add(newPlayerWare);
            }


            await _mudProvider.ShowMessage(playerId, $"你购买了 {number}{ware.Unit}[{ware.Name}]!");

            return(Unit.Value);
        }