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 Delete(WareEntity entity) { await _wareRepository.Remove(entity); await _bus.RaiseEvent(new EntityDeletedEvent <WareEntity>(entity)).ConfigureAwait(false); }
public async Task Add(WareEntity entity) { await _wareRepository.Add(entity); }
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); }
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); }