Beispiel #1
0
        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)));
 }