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); }); }
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); }