public async Task <GameData> AttackMonster(string userId) { Player player = await GetPlayer(userId); if (player.CurrentRoomId != null) { Room room = await _roomsClient.GetRoomById((int)player.CurrentRoomId); if (room.MonsterId != null) { // Attack monster by player bool isDead = await _monstersClient.PatchAttackMonster((int)room.MonsterId); Monster monster = null; if (!isDead) { // If it didn't died it attack player too player = await _usersClient.PatchHpLoss(userId); monster = await _monstersClient.GetMonsterById((int)room.MonsterId); // If player died if (player.CurrentHP <= 0) { // ? } } else { // If monster died clear it from everywhere await _monstersClient.DeleteMonster((int)room.MonsterId); room = await _roomsClient.DeleteMonster(room.RoomId); } return(new GameData() { Player = player, Room = room, Monster = monster }); } else { throw new NullReferenceException("No alive monsters in the room!"); } } else { throw new NullReferenceException("Player has no room!"); } }