public async Task <IActionResult> AddPersonagemHabilidadeAsync(PersonagemHabilidade novoPersonagemHabilidade) { Personagem personagem = await _context.Personagens .Include(p => p.Arma) .Include(p => p.PersonagemHabilidades).ThenInclude(ps => ps.Habilidade) .FirstOrDefaultAsync(p => p.Id == novoPersonagemHabilidade.PersonagemId && p.Usuario.Id == ObterUsuarioId()); if (personagem == null) { return(BadRequest("Personagem não encontrado para o usuário em questão")); } Habilidade habilidade = await _context.Habilidades .FirstOrDefaultAsync(s => s.Id == novoPersonagemHabilidade.HabilidadeId); if (habilidade == null) { BadRequest("Habilidade não encontrada"); } PersonagemHabilidade ph = new PersonagemHabilidade(); ph.Personagem = personagem; ph.Habilidade = habilidade; await _context.PersonagemHabilidades.AddAsync(ph); await _context.SaveChangesAsync(); return(Ok(ph)); }
public IActionResult Delete(PersonagemHabilidade ph) { PersonagemHabilidade phRemover = _context.PersonagemHabilidades .FirstOrDefault(phBusca => phBusca.PersonagemId == ph.PersonagemId && phBusca.HabilidadeId == ph.HabilidadeId); if (phRemover == null) { return(BadRequest("Personagem ou habilidades não encontrados com os Id's informados")); } _context.PersonagemHabilidades.Remove(phRemover); _context.SaveChanges(); return(Ok("Dados removidos com sucesso.")); }
public async Task <IActionResult> AtaqueComHabilidade(Disputa d) { Personagem atacante = await _context.Personagens .Include(p => p.PersonagemHabilidades).ThenInclude(ph => ph.Habilidade) .FirstOrDefaultAsync(p => p.Id == d.AtacanteId); Personagem oponente = await _context.Personagens .FirstOrDefaultAsync(p => p.Id == d.OponenteId); PersonagemHabilidade ph = await _context.PersonagemHabilidades .Include(p => p.Habilidade) .FirstOrDefaultAsync(phBusca => phBusca.HabilidadeId == d.HabilidadeId); if (ph == null) { d.Narracao = $"{atacante.Nome} não possui esta habilidade."; } else { int dano = ph.Habilidade.Dano + (new Random().Next(atacante.Inteligencia)); dano = dano - new Random().Next(oponente.Defesa); if (dano > 0) { oponente.PontosVida = oponente.PontosVida - (int)dano; } if (oponente.PontosVida <= 0) { d.Narracao += $"{oponente.Nome} foi derrotado"; } _context.Personagens.Update(oponente); await _context.SaveChangesAsync(); StringBuilder dados = new StringBuilder(); dados.AppendFormat(" Atacante: {0}", atacante.Nome); dados.AppendFormat(" Oponente: {0}", oponente.Nome); dados.AppendFormat(" Pontos de vida do atacante: {0}", atacante.PontosVida); dados.AppendFormat(" Pontos de vida do oponente: {0}", oponente.PontosVida); dados.AppendFormat(" Dano: {0}", dano); d.Narracao += dados.ToString(); } return(Ok(d)); }