public async Task <JsonResult> AttackDragon(int dragonId = -1) { if (dragonId > 0) { var id = GetHeroIdFromToken((Request.Cookies[_tokenName])); var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id); if (hero != null) { var dragon = await _context.Dragons.FirstOrDefaultAsync(d => d.Id == dragonId); if (dragon != null)//если дракон найден в базе { var allDamageToDragon = await _context.Hits.Where(h => h.DragonId == dragon.Id).SumAsync(h => h.Damage); if (dragon.Health > allDamageToDragon) //если дракон жив { var hit = new Hit(hero, dragon, dragon.Health - allDamageToDragon); //создаем удар await _context.Hits.AddAsync(hit); await _context.SaveChangesAsync(); //var heroDamage = await _context.Hits.Where(h => h.DragonId == dragon.Id //&& h.HeroId == hero.Id).SumAsync(h => h.Damage);// полный урон героя дракону var dragoInfo = new DragonInfoModel(dragon, allDamageToDragon + hit.Damage, -1); var view = dragoInfo.CurrentHealth == 0 ? await this.RenderViewAsync("PartialWin", dragoInfo.Name, true) : null;//если дракон убит передать представление для отображения победы return(Json(new { status = "ok", dragon = dragoInfo, damage = hit.Damage, view })); //hit.Damage - текущий урон дракону } } } } return(Json(new { status = "error", message = "Ошибка!" })); }
public async Task <IActionResult> Attack(int?dragonId) { if (dragonId != null && dragonId > 0) { var id = GetHeroIdFromToken((Request.Cookies[_tokenName])); var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id); if (hero != null) { var dragon = await _context.Dragons.FirstOrDefaultAsync(d => d.Id == dragonId); if (dragon != null)//если дракон найден в базе { var allDamageToDragon = await _context.Hits.Where(h => h.DragonId == dragon.Id).SumAsync(h => h.Damage); if (dragon.Health > allDamageToDragon)//если дракон жив { var dragoInfo = new DragonInfoModel(dragon, allDamageToDragon, -1); return(View(dragoInfo)); } } } } return(RedirectToAction("Index")); }