public async Task <IActionResult> UpdateCharacter(CharacterUpdateDto updateCharacter)
        {
            ServiceResponse <CharacterReadDto> serviceResponse = new ServiceResponse <CharacterReadDto>();

            var validator = new CharacterUpdateDtoValidator();
            var result    = validator.Validate(updateCharacter);

            if (!result.IsValid)
            {
                serviceResponse.Success = false;

                foreach (var failure in result.Errors)
                {
                    serviceResponse.Message += failure;
                }
            }
            else
            {
                serviceResponse = await _service.UpdateCharacter(updateCharacter);
            }

            if (serviceResponse.Success == false)
            {
                return(NotFound(serviceResponse));
            }
            return(Ok(serviceResponse));
        }
        public async Task <ActionResult> FightForCredits()
        {
            var user = await UserFacade.GetUserAccordingToUsernameAsync(User.Identity.Name);

            if (user.Credits < 10)
            {
                return(Json(new { CanFight = false }, JsonRequestBehavior.AllowGet));
            }
            var charUpdate = new CharacterUpdateDto()
            {
                Id          = user.Character.Id,
                Name        = user.Character.Name,
                Experience  = user.Character.Experience,
                Gold        = user.Character.Gold,
                CurrentHp   = user.Character.CurrentHp,
                SkillPoints = user.Character.SkillPoints,
                Sickness    = null
            };
            await CharacterFacade.EditAsync(charUpdate);

            var userUpdate = new UserEditDto()
            {
                Credits = user.Credits - 10, CharacterId = user.CharacterId, Id = user.Id, Score = user.Score
            };
            await UserFacade.EditAsync(userUpdate);

            return(Json(new { CanFight = true }, JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> EatItem(Guid?itemId, Guid charId)
        {
            var model = await CharacterFacade.GetAsync(charId);

            if (model.CurrentHp == model.CalculateAttributes().Hp * 10)
            {
                return(RedirectToAction("Detail"));
            }
            var      toHeal   = model.CalculateAttributes().Hp * 10 - model.CurrentHp;
            DateTime?sickness = DateTime.Now.AddHours(1);

            if (itemId != null)
            {
                sickness = model.Sickness;
                var item = await EquipmentFacade.GetItemAsync(itemId.GetValueOrDefault());

                toHeal = (item.Attributes.Hp * 10) >= toHeal ? toHeal : (item.Attributes.Hp * 10);
                await EquipmentFacade.DeleteFromInventoryAsync(model.Inventory, item);
            }

            var charUpdate = new CharacterUpdateDto()
            {
                Id          = model.Id,
                Name        = model.Name,
                Experience  = model.Experience,
                Gold        = model.Gold,
                CurrentHp   = model.CurrentHp + toHeal,
                Sickness    = sickness,
                SkillPoints = model.SkillPoints
            };
            await CharacterFacade.EditAsync(charUpdate);

            return(RedirectToAction("Detail"));
        }
Beispiel #4
0
        public async Task <ActionResult> BuyItem(Guid?id, Guid?charId, Guid?shopId)
        {
            if (id == null || charId == null || shopId == null)
            {
                return(RedirectToAction("Index"));
            }
            var item = await EquipmentFacade.GetItemAsync(id.GetValueOrDefault());

            var character = await CharacterFacade.GetAsync(charId.GetValueOrDefault());

            if (await EquipmentFacade.AddToInventoryAsync(character.Inventory, item))
            {
                var updatedUser = new CharacterUpdateDto()
                {
                    Name        = character.Name,
                    CurrentHp   = character.CurrentHp,
                    Experience  = character.Experience,
                    Gold        = character.Gold - (int)(item.Price * 1.5),
                    Id          = character.Id,
                    SkillPoints = character.SkillPoints,
                    Sickness    = character.Sickness
                };
                await CharacterFacade.EditAsync(updatedUser);
            }

            return(RedirectToAction("Detail", new { id = shopId }));
        }
Beispiel #5
0
        public async Task <IActionResult> UpdateCharacter(CharacterUpdateDto updateCharacter)
        {
            var serviceResponse = await _service.UpdateCharacter(updateCharacter);

            if (serviceResponse.Success == false)
            {
                return(NotFound(serviceResponse));
            }
            return(Ok(serviceResponse));
        }
Beispiel #6
0
        public async Task <bool> EditAsync(CharacterUpdateDto entityDto)
        {
            using (var uow = UnitOfWorkProvider.Create())
            {
                if ((await _characterService.GetAsync(entityDto.Id, false)) == null)
                {
                    return(false);
                }
                await _characterService.Update(entityDto);

                await uow.Commit();

                return(true);
            }
        }
Beispiel #7
0
        public async Task <Tuple <bool, List <string> > > FightAsync(CharacterDto character, MonsterDto monster, QuestDto quest)
        {
            var log = new List <string>();

            _random = new Random();
            if (character.Sickness > DateTime.Now)
            {
                var diff = Math.Abs(Math.Floor((character.Sickness - DateTime.Now).Value.TotalSeconds));
                log.Add($"You can't fight at the moment. You are too tired and will not be able to fight for {diff} seconds.");
                return(new Tuple <bool, List <string> >(false, log));
            }

            if (character.CurrentHp <= 0)
            {
                log.Add("You can't fight at the moment. You should get some rest, because you are too devasteted.");
                return(new Tuple <bool, List <string> >(false, log));
            }

            var characterAttr = character.CalculateAttributes();

            characterAttr.Hp = character.CurrentHp / 10; //setting hp to current value
            var combat = Task.Run(() => Combat(characterAttr, monster.Attributes, log));
            var result = await combat;

            using (var uow = UnitOfWorkProvider.Create())
            {
                var updatedUser = new CharacterUpdateDto()
                {
                    Name        = character.Name,
                    CurrentHp   = result.Item2,
                    Experience  = character.Experience,
                    Gold        = character.Gold,
                    Id          = character.Id,
                    SkillPoints = character.SkillPoints,
                    Sickness    = DateTime.Now.AddMinutes(10)
                };
                if (result.Item1)
                {
                    updatedUser.Experience += quest.Experience;
                    updatedUser.Gold       += quest.Gold;
                }

                await _characterService.Update(updatedUser);

                await uow.Commit();
            }
            return(new Tuple <bool, List <string> >(result.Item1, log));
        }
Beispiel #8
0
        public async Task <ServiceResponse <CharacterReadDto> > UpdateCharacter(CharacterUpdateDto updateCharacter)
        {
            ServiceResponse <CharacterReadDto> serviceResponse = new ServiceResponse <CharacterReadDto>();

            try
            {
                serviceResponse.Data = await _dataService.Update(updateCharacter);
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
            }

            return(serviceResponse);
        }
        public async Task <ActionResult> SellItem(Guid itemId, Guid charId)
        {
            var item = await EquipmentFacade.GetItemAsync(itemId);

            var model = await CharacterFacade.GetAsync(charId);


            var charUpdate = new CharacterUpdateDto()
            {
                Id   = model.Id, Name = model.Name, Experience = model.Experience,
                Gold = model.Gold + item.Price, CurrentHp = model.CurrentHp, Sickness = model.Sickness, SkillPoints = model.SkillPoints
            };
            await EquipmentFacade.DeleteFromInventoryAsync(model.Inventory, item);

            await CharacterFacade.EditAsync(charUpdate);

            return(RedirectToAction("Detail"));
        }
        public async Task <ActionResult> EquipItem(Guid itemId, Guid charId)
        {
            var item = await EquipmentFacade.GetItemAsync(itemId);

            var model = await CharacterFacade.GetAsync(charId);

            var charUpdate = new CharacterUpdateDto()
            {
                Id          = model.Id,
                Name        = model.Name,
                Experience  = model.Experience,
                Gold        = model.Gold,
                CurrentHp   = model.CurrentHp + (item.Attributes.Hp * 10),
                Sickness    = model.Sickness,
                SkillPoints = model.SkillPoints
            };

            ItemDto equipped = null;

            foreach (var itemDto in model.Equipment.ListItems())
            {
                if (itemDto != null && itemDto.ArmorClass == item.ArmorClass)
                {
                    equipped = itemDto;
                }
            }

            await EquipmentFacade.DeleteFromInventoryAsync(model.Inventory, item);

            if (equipped != null)
            {
                charUpdate.CurrentHp -= equipped.Attributes.Hp * 10;
                await EquipmentFacade.AddToInventoryAsync(model.Inventory, equipped);
            }
            await EquipmentFacade.EquipItemAsync(model.Equipment, item);

            await CharacterFacade.EditAsync(charUpdate);

            return(RedirectToAction("Detail"));
        }
        public async Task <ServiceResponse <CharacterReadDto> > UpdateCharacter(CharacterUpdateDto dto)
        {
            ServiceResponse <CharacterReadDto> serviceResponse = new ServiceResponse <CharacterReadDto>();

            try
            {
                Character character = _context.Characters.AsNoTracking().First(c => c.Id == dto.IdForUpdate);
                character = _mapper.Map <CharacterUpdateDto, Character>(dto, character);
                _context.Update(character);
                if (await SaveChanges())
                {
                    serviceResponse.Data = _mapper.Map <CharacterReadDto>(character);
                }
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
            }

            return(serviceResponse);
        }
Beispiel #12
0
        public async Task <ActionResult <Character> > Put([FromBody] CharacterUpdateDto modelUpdateDto, int id)
        {
            try
            {
                var character = await _repository.GetCharacterByIdAsync(id);

                if (character == null)
                {
                    return(NotFound());
                }
                if (ModelState.IsValid)
                {
                    var potterApi = new PotterApi();
                    var accio     = await potterApi.AccioHouse(modelUpdateDto.House);

                    if (accio)
                    {
                        _mapper.Map(modelUpdateDto, character);
                        await _repository.SaveChangesAsync();

                        return(NoContent());
                    }
                    else
                    {
                        ModelState.AddModelError("Accio", "Accio House didn't work");
                        return(BadRequest(ModelState));
                    }
                }
                else
                {
                    return(BadRequest(ModelState));
                }
            }
            catch (Exception)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
        public IActionResult PutCharacter([FromRoute] int id, [FromBody] CharacterUpdateDto characterUpdate)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var existingCharacter = _charactersRepository.get(id, null);

            if (characterUpdate == null)
            {
                return(BadRequest());
            }
            if (existingCharacter == null)
            {
                return(NotFound());
            }


            if (characterUpdate.Name != null)
            {
                existingCharacter.Name = characterUpdate.Name;
            }


            _charactersRepository.put(existingCharacter);

            var result = _charactersRepository.save();

            if (!result)
            {
                return(new StatusCodeResult(500));
            }

            return(CreatedAtAction("GetCharacter", new { id = existingCharacter.Id }, existingCharacter));
        }
Beispiel #14
0
        public async Task <CharacterReadDto> Update(CharacterUpdateDto updateCharacter)
        {
            var dto = new CharacterReadDto();

            try
            {
                Character character = _context.Character.First(c => c.Id == updateCharacter.IdForUpdate);

                character = _mapper.Map <CharacterUpdateDto, Character>(updateCharacter, character);

                _context.Update(character);

                if (await SaveChanges())
                {
                    dto = _mapper.Map <CharacterReadDto>(character);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }

            return(dto);
        }
Beispiel #15
0
        public async Task <Tuple <bool, List <string> > > FightAsync(CharacterDto character, CharacterDto character2)
        {
            var log = new List <string>();

            _random = new Random();
            if (character.Sickness > DateTime.Now)
            {
                var diff = Math.Abs(Math.Floor((character.Sickness - DateTime.Now).Value.TotalSeconds));
                log.Add($"You can't fight at the moment. You are too tired and will not be able to fight for {diff} seconds.");
                return(new Tuple <bool, List <string> >(false, log));
            }

            if (character.CurrentHp <= 0)
            {
                log.Add("You can't fight at the moment. You should get some rest, because you are too devasteted.");
                return(new Tuple <bool, List <string> >(false, log));
            }

            if (character2.CurrentHp <= 0)
            {
                log.Add("It wouldn't be very nice if you attacked your opponent right now. He needs to lick his wounds first.");
                return(new Tuple <bool, List <string> >(false, log));
            }


            var player1 = character.CalculateAttributes();
            var player2 = character2.CalculateAttributes();

            player1.Hp = character.CurrentHp / 10; //setting hp to current value
            player2.Hp = character.CurrentHp / 10; //setting hp to current value
            var combat = Task.Run(() => Combat(player1, player2, log));
            var result = await combat;

            using (var uow = UnitOfWorkProvider.Create())
            {
                var updatedUser1 = new CharacterUpdateDto()
                {
                    Name        = character.Name,
                    CurrentHp   = result.Item2,
                    Experience  = character.Experience,
                    Gold        = character.Gold,
                    Id          = character.Id,
                    SkillPoints = character.SkillPoints,
                    Sickness    = DateTime.Now.AddMinutes(10)
                };

                var updatedUser2 = new CharacterUpdateDto()
                {
                    Name        = character2.Name,
                    CurrentHp   = result.Item3,
                    Experience  = character2.Experience,
                    Gold        = character2.Gold,
                    Id          = character2.Id,
                    SkillPoints = character2.SkillPoints,
                    Sickness    = character2.Sickness
                };

                if (result.Item1)
                {
                    updatedUser2.Gold -= (int)Math.Floor((float)updatedUser2.Gold / 100) * 10;
                    updatedUser1.Gold += (int)Math.Floor((float)updatedUser2.Gold / 100) * 10;
                }
                else
                {
                    updatedUser1.Gold -= (int)Math.Floor((float)updatedUser1.Gold / 100) * 10;
                    updatedUser2.Gold += (int)Math.Floor((float)updatedUser1.Gold / 100) * 10;
                }

                await _characterService.Update(updatedUser1);

                await _characterService.Update(updatedUser2);

                await uow.Commit();
            }
            return(new Tuple <bool, List <string> >(result.Item1, log));
        }