public async Task <ServiceResponce <AttackResultDTO> > SkillAttack(SKillAttackDTO request) { ServiceResponce <AttackResultDTO> responce = new ServiceResponce <AttackResultDTO>(); try { Charecter attacker = await _context.Charecters .Include(c => c.CharecterSkills).ThenInclude(cs => cs.Skill) .FirstOrDefaultAsync(c => c.Id == request.AttackerId); Charecter opponent = await _context.Charecters.FirstOrDefaultAsync(c => c.Id == request.OpponentId); CharecterSkill charecterSkill = attacker.CharecterSkills.FirstOrDefault(cs => cs.Skill.Id == request.SkillId); if (charecterSkill == null) { responce.Success = false; responce.Message = $"{attacker.Name} doesnt know that skill!"; return(responce); } int damage = DoSkillAttack(attacker, opponent, charecterSkill); if (opponent.HitPoints <= 0) { responce.Message = $"{opponent.Name} has been defeated!"; } _context.Charecters.Update(opponent); await _context.SaveChangesAsync(); responce.Data = new AttackResultDTO { Attacker = attacker.Name, AttackerHp = attacker.HitPoints, Opponent = opponent.Name, OpponentHp = opponent.HitPoints, Damage = damage }; } catch (Exception ex) { responce.Success = false; responce.Message = ex.Message; } return(responce); }
public async Task <IActionResult> SkillAttack(SKillAttackDTO request) { return(Ok(await _fightService.SkillAttack(request))); }