public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto request) { ServiceResponse <AttackResultDto> response = new ServiceResponse <AttackResultDto>(); try { Character attacker = await this.context.Characters .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skill) .FirstOrDefaultAsync(c => c.Id == request.AttackerId); Character opponent = await this.context.Characters .FirstOrDefaultAsync(c => c.Id == request.OpponentId); CharacterSkill characterSkill = attacker.CharacterSkills.FirstOrDefault(cs => cs.Skill.Id == request.SkillId); if (characterSkill == null) { response.Success = false; response.Message = $"{attacker.Name} doesn't know that skill."; return(response); } int damage = DoSkillAttack(attacker, opponent, characterSkill); if (opponent.HitPoints <= 0) { response.Message = $"{opponent.Name} has been defeated!"; } this.context.Characters.Update(opponent); await this.context.SaveChangesAsync(); response.Data = new AttackResultDto { Attacker = attacker.Name, AttackerHP = attacker.HitPoints, Opponent = opponent.Name, OpponentHP = opponent.HitPoints, Damage = damage }; } catch (Exception ex) { response.Success = false; response.Message = ex.Message; } return(response); }
public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto request) { ServiceResponse <AttackResultDto> response = new ServiceResponse <AttackResultDto>(); try { Character attacker = await _dataContext.Characters .Include(c => c.CharacterSkills).ThenInclude(c => c.Skill) .FirstOrDefaultAsync(c => c.Id == request.AttackerId); Character opponent = await _dataContext.Characters .FirstOrDefaultAsync(c => c.Id == request.OpponentId); CharacterSkill characterSkill = attacker.CharacterSkills.FirstOrDefault(c => c.Skill.Id == request.SkillId); if (characterSkill == null) { response.Success = false; response.Message = string.Format("{0} doesnt know that skill.", attacker.Name); return(response); } var damage = DoSkillAttack(characterSkill, attacker, opponent); if (opponent.HitPoints < 0) { response.Message = string.Format("{0} has been defeated.", opponent.Name); } _dataContext.Characters.Update(opponent); await _dataContext.SaveChangesAsync(); response.Data = new AttackResultDto { Attacker = attacker.Name, AttackerHp = attacker.HitPoints, Opponent = opponent.Name, OpponentHP = opponent.HitPoints, Damage = damage }; } catch (Exception e) { response.Success = false; response.Message = e.Message; } return(response); }
public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto request) { ServiceResponse <AttackResultDto> response = new ServiceResponse <AttackResultDto>(); try { Character attacker = await _context.Characters .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skill) .FirstOrDefaultAsync(c => c.Id == request.AttackerId); Character Opponent = await _context.Characters.FirstOrDefaultAsync(c => c.Id == request.OpponentId); CharacterSkill skill = await _context.CharacterSkills.FirstOrDefaultAsync(); int damage = attacker.weapon.Damage + (new Random().Next(attacker.Strength)); damage -= new Random().Next(Opponent.Defense); if (damage > 0) { Opponent.HitPoints -= damage; } if (Opponent.HitPoints <= 0) { response.Message = $"{Opponent.Name} has been defeated"; } _context.Characters.Update(Opponent); await _context.SaveChangesAsync(); response.Data = new AttackResultDto { Attacker = attacker.Name, AttackerHP = attacker.HitPoints, Opponent = Opponent.Name, OpponentHP = Opponent.HitPoints, Damage = damage }; } catch (Exception ex) { response.Success = false; response.Message = ex.Message; } return(response); }
public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto skillAttack) { ServiceResponse <AttackResultDto> response = new ServiceResponse <AttackResultDto>(); try { Character attacker = await _characterService.GetCharacterById(skillAttack.AttackerId, AuthType.WithAuth); if (attacker == null) { throw new Exception("Attacker not found."); } Skill skill = attacker.CharacterSkills.Select(cs => cs.Skill).FirstOrDefault(s => s.Id == skillAttack.SkillId); if (skill == null) { throw new Exception("Skill not found"); } Character defender = await _characterService.GetCharacterById(skillAttack.DefenderId, AuthType.NoneAuth); if (defender == null) { throw new Exception("Defender not found."); } int damage = DoSkillAttack(attacker, defender, skill); if (defender.Health <= 0) { response.Message = $"{defender.Name} has fallen!"; } response.Data = AttackResultHandler(attacker, defender, damage); } catch (Exception e) { response.Success = false; response.Message = e.Message; } return(response); }
public async Task <IActionResult> SkillAttack(SkillAttackDto request) { return(Ok(await _fightService.SkillAttack(request))); }
public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto request) { ServiceResponse <AttackResultDto> serviceResponse = new ServiceResponse <AttackResultDto>(); try { Character attacker = await _context.Characters .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skill) .FirstOrDefaultAsync(c => c.Id == request.AttackerId); Character opponent = await _context.Characters .FirstOrDefaultAsync(c => c.Id == request.OpponentId); //getting the skills of the character (Attacker) CharacterSkill characterSkill = attacker.CharacterSkills.FirstOrDefault(cs => cs.Skill.Id == request.SkillId); //to check if the skills of characters are null or not if (characterSkill == null) { serviceResponse.Success = false; serviceResponse.Message = "Character donot know this skill"; return(serviceResponse); } //To check if the user is attacking itseld or not because self attacking is not allowed if (request.AttackerId == request.OpponentId) { serviceResponse.Success = false; serviceResponse.Message = "Character cannot attack itself"; return(serviceResponse); } /* * Damage formula * We can write the formula of our own choice */ int damage = SkillAttack(attacker, opponent, characterSkill); if (opponent.HitPoints <= 0) { serviceResponse.Message = $"{opponent.Name} has been defeated by the attacker {attacker.Name}"; } _context.Characters.Update(opponent); await _context.SaveChangesAsync(); serviceResponse.Data = new AttackResultDto { Attacker = attacker.Name, AttackerHP = attacker.HitPoints, Opponent = opponent.Name, OpponentHP = opponent.HitPoints, Damage = damage }; } catch (Exception e) { serviceResponse.Success = false; serviceResponse.Message = e.Message; } return(serviceResponse); }
public async Task <ActionResult <ServiceResponse <AttackResultDto> > > SkillAttack(SkillAttackDto request) { return(Ok(await _fightService.SkillAttack(request))); }
public async Task <ServiceResponse <AttackResultDto> > SkillAttack(SkillAttackDto skillAttackDto) { ServiceResponse <AttackResultDto> serviceResponse = new ServiceResponse <AttackResultDto>(); try { Character attacker = await _context.Characters .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skill) .FirstOrDefaultAsync(c => c.Id == skillAttackDto.AttackerID); if (attacker == null) { serviceResponse.Success = false; serviceResponse.Message = "Attacker not found"; return(serviceResponse); } Character opponent = await _context.Characters .FirstOrDefaultAsync(c => c.Id == skillAttackDto.OpponentId); if (opponent == null) { serviceResponse.Success = false; serviceResponse.Message = "Opponent not found"; return(serviceResponse); } CharacterSkill characterSkill = attacker.CharacterSkills.FirstOrDefault(cs => cs.Skill.Id == skillAttackDto.SkillId); if (characterSkill == null) { serviceResponse.Success = false; serviceResponse.Message = $"{attacker.Name} doesn't know that skill"; return(serviceResponse); } int damage = DoSkillAttack(attacker, opponent, characterSkill); if (opponent.HitPoints <= 0) { serviceResponse.Message = $"{opponent.Name} has been defeated"; } _context.Characters.Update(opponent); await _context.SaveChangesAsync(); serviceResponse.Data = new AttackResultDto() { Attacker = attacker.Name, Opponent = opponent.Name, AttackerHP = attacker.HitPoints, OpponenetHP = opponent.HitPoints, Damage = damage }; } catch (System.Exception ex) { serviceResponse.Success = false; serviceResponse.Message = ex.Message; } return(serviceResponse); }
public async Task <IActionResult> SkillAttack(SkillAttackDto skillAttack) => ActionResultHandler(await _fightService.SkillAttack(skillAttack));