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)); }
public async Task Update(PlayerWareEntity entity) { await _scriptRepository.Update(entity); }
public async Task Add(PlayerWareEntity entity) { await _scriptRepository.Add(entity); }
private async Task DoWork(PlayerEntity player) { await _mudProvider.ShowMessage(player.Id, $"你正在{player.Status}。。。"); WorkTypeEnum workType = WorkTypeEnum.伐木; switch (player.Status) { case PlayerStatusEnum.伐木: workType = WorkTypeEnum.伐木; break; case PlayerStatusEnum.挖矿: workType = WorkTypeEnum.挖矿; break; case PlayerStatusEnum.打猎: workType = WorkTypeEnum.打猎; break; case PlayerStatusEnum.采药: workType = WorkTypeEnum.采药; break; case PlayerStatusEnum.钓鱼: workType = WorkTypeEnum.钓鱼; break; case PlayerStatusEnum.打工: workType = WorkTypeEnum.打工; break; default: return; } var ids = (await _roomItemDropDomainService.GetAll()).Where(x => x.RoomId == player.RoomId).Select(x => x.ItemDropId).ToList(); var itemDrop = (await _itemDropDomainService.GetAll()).Where(x => ids.Contains(x.Id)).FirstOrDefault(x => x.WorkType == workType); if (itemDrop == null) { return; } var itemDropRates = (await _itemDropRateDomainService.GetAll()).Where(x => x.ItemDropId == itemDrop.Id).ToList(); if (itemDropRates?.Count == 0) { return; } var random = new Random(); int maxWeight = 100;//掉落总权重 var itemDropModels = new List <ItemDropRateModel>(); foreach (var itemDropRate in itemDropRates.OrderBy(x => x.Order)) { if (itemDropRate.Percent < random.Next(0, 100)) { continue; } int number = random.Next(Math.Min(itemDropRate.MinNumber, itemDropRate.MaxNumber), itemDropRate.MaxNumber + 1); if (number <= 0) { continue; } //掉落 maxWeight -= itemDropRate.Weight; var itemDropModel = new ItemDropRateModel { DropType = itemDropRate.DropType, Number = number, WareId = itemDropRate.WareId }; itemDropModels.Add(itemDropModel); if (maxWeight <= 0) { break; } } if (itemDropModels.Count == 0) { //没有掉落 return; } var playerAttributeChanged = false; List <string> dropContents = new List <string>(); foreach (var itemDropModel in itemDropModels) { switch (itemDropModel.DropType) { case ItemDropTypeEnum.潜能: playerAttributeChanged = true; player.Pot += itemDropModel.Number; dropContents.Add($"潜能 +{itemDropModel.Number}"); break; case ItemDropTypeEnum.经验: playerAttributeChanged = true; player.Exp += itemDropModel.Number; dropContents.Add($"经验 +{itemDropModel.Number}"); break; case ItemDropTypeEnum.金钱: playerAttributeChanged = true; player.Money += itemDropModel.Number; dropContents.Add($" +{itemDropModel.Number.ToMoney()}"); break; case ItemDropTypeEnum.物品: #region MyRegion int wareId = itemDropModel.WareId; int number = itemDropModel.Number; var ware = await _wareDomainService.Get(wareId); if (ware == null) { continue; } dropContents.Add($"{ware.Name} X{number}"); var canStack = ware.Category != WareCategoryEnum.武器; if (canStack) { var playerWare = await _playerWareDomainService.Get(x => x.WareId == ware.Id && x.PlayerId == player.Id); if (playerWare == null) { playerWare = new PlayerWareEntity { IsBind = false, IsTemp = false, Level = 1, Number = number, Damage = 0, PlayerId = player.Id, Status = WareStatusEnum.卸下, WareId = wareId, WareName = ware.Name }; await _playerWareDomainService.Add(playerWare); } else { playerWare.Number += number; await _playerWareDomainService.Update(playerWare); } } else { var playerWare = new PlayerWareEntity { IsBind = false, IsTemp = false, Level = 1, Number = number, Damage = 0, PlayerId = player.Id, Status = WareStatusEnum.卸下, WareId = wareId, WareName = ware.Name }; await _playerWareDomainService.Add(playerWare); } #endregion break; } } if (playerAttributeChanged) { await _bus.RaiseEvent(new PlayerAttributeChangedEvent(player)).ConfigureAwait(false); } if (dropContents.Count > 0) { await _mudProvider.ShowMessage(player.Id, $"获得{ string.Join(",", dropContents) }。"); } }
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); }