Скопировать содержимое раздачи в любое место на диске

Обновлено: 07.07.2024

Cyberpunk 2077 — приключенческая ролевая игра, действие которой происходит в мегаполисе Найт-Сити, где власть, роскошь и модификации тела ценятся выше всего. Вы играете за V, наёмника в поисках устройства, позволяющего обрести бессмертие. Вы сможете менять киберимпланты, навыки и стиль игры своего персонажа, исследуя открытый мир, где ваши поступки влияют на ход сюжета и всё, что вас окружает.

● Год выпуска: 10 дек. 2020
● Жанр: Action / Cyberpunk / Open World / RPG / Futuristic / Sci-fi
● Разработчик: CD PROJEKT RED
● Издательство: CD PROJEKT RED
● Язык интерфейса: Русский, Английский
● Язык озвучки: Русский, Английский
● Тип издания: лицензия
● Таблeтка: Не требуется (RIP)

- ОС: Windows 7
- Процессор: Intel Core i5-3570K / AMD FX-8310
- Оперативная память: 8 GB ОЗУ
- Видеокарта: NVIDIA GeForce GTX 780 or AMD Radeon RX 470, DirectX 12
- Место на диске: 70 GB
- Дополнительно: рекомендуется устанавливать на SSD

1. Скопировать содержимое раздачи в любое место на диске
2. Запустить игру с файла Cyberpunk2077.exe по пути Cyberpunk 2077\bin\x64
3. Играть

1. Измените пути до *.exe файла игры и до папки с игрой на свои. (в .reg файле).
2. Запустите .reg файл

1. Открываем параметры uTorrent (Нажимаем сочетание клавиш CTRL+P)
2. Заходим в "Скорость"
3. Ставим такие параметры:


4. По желанию также можно ограничить скорость раздачи.

Вложения

Rolzzandik

Iko-AwP

Пожилой кактус

Iko-AwP

Dayliecc

Dayliecc

krazik

krazik

animepsih2007

animepsih2007

Rolzzandik

Администратор

Rolzzandik

animepsih2007

animepsih2007

hvh_kotik

хвх коты спасут мир

hvh_kotik

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Cyberpunk 2077 — приключенческая ролевая игра, действие которой происходит в мегаполисе Найт-Сити, где власть, роскошь и модификации тела ценятся выше всего. Вы играете за V, наёмника в поисках устройства, позволяющего обрести бессмертие. Вы сможете менять киберимпланты, навыки и стиль игры своего персонажа, исследуя открытый мир, где ваши поступки влияют на ход сюжета и всё, что вас окружает.

● Год выпуска: 10 дек. 2020
● Жанр: Action / Cyberpunk / Open World / RPG / Futuristic / Sci-fi
● Разработчик: CD PROJEKT RED
● Издательство: CD PROJEKT RED
● Язык интерфейса: Русский, Английский
● Язык озвучки: Русский, Английский
● Тип издания: лицензия
● Таблeтка: Не требуется (RIP)

- ОС: Windows 7
- Процессор: Intel Core i5-3570K / AMD FX-8310
- Оперативная память: 8 GB ОЗУ
- Видеокарта: NVIDIA GeForce GTX 780 or AMD Radeon RX 470, DirectX 12
- Место на диске: 70 GB
- Дополнительно: рекомендуется устанавливать на SSD

1. Скопировать содержимое раздачи в любое место на диске
2. Запустить игру с файла Cyberpunk2077.exe по пути Cyberpunk 2077\bin\x64
3. Играть

1. Измените пути до *.exe файла игры и до папки с игрой на свои. (в .reg файле).
2. Запустите .reg файл

1. Открываем параметры uTorrent (Нажимаем сочетание клавиш CTRL+P)
2. Заходим в "Скорость"
3. Ставим такие параметры:
Посмотреть вложение 3224
4. По желанию также можно ограничить скорость раздачи.

Не так давно, а именно 5 июня хабрачеловек по имени alan008 задал вопрос. Чтобы не заставлять ходить за подробностями, приведу его здесь:

За несколько лет с разных трекеров (преимущественно c rutracker'а) разными клиентами (преимущественно uTorrent'ом) скачано много гигабайт разного полезного контента. Скачанные файлы впоследствии вручную перемещались с одного диска на другой, uTorrent их соответственно не видит. Многие .torrent файлы устарели сами по себе (например, велась раздача сериала путем добавления новых серий заменой .torrent файла).

Теперь сам вопрос: есть ли способ автоматически (не вручную) установить соответствие между имеющимися на компьютере .torrent файлами и содержимым, раскиданным по разным логическим дискам компьютера? Цель: удалить лишние (неактуальные) .torrent файлы, а для актуальных — поставить всё на раздачу. У кого какие идеи? :)

При необходимости (если это требуется) можно снова поместить все файлы данных в один каталог на одном логическом диске.

В обсуждениях сошлись на том, что если это и можно сделать, то только ручками. Мне же этот вопрос показался интересным, и после возвращения из отпуска я нашел время, чтобы в нем разобраться.

Потратив в общей сложности неделю на разбор формата .torrent-файла, поиск нормально работающей библиотеки для его парсинга, я приступил к написанию программы, которая позволит решить проблему затронутую в упомянутом вопросе.

  1. Получилось много, но не все.
  2. По формату файла .torrent будут даны лишь необходимые пояснения.
  3. Людей, чувствительных к временами некачественному коду, прошу меня заранее простить — я знаю, что многое можно было написать лучше, оптимальнее и безглючнее.

В данном случае имеется отличный способ решения — перекачать заново. Но мы же не ищем легких путей, да и предлагался такой вариант! Итак, будем решать задачу по сложному — не скачивать.

Приступая к написанию любой программы, необходимо сначала продумать хотябы базовый алгоритм ее работы. В нашем случае алгоритм, по сути, состоит из двух шагов:

  1. Найти и прочитать все .torrent-файлы;
  2. Найти в куче файлов тот, который соответствует описанному в .torrent, и переместить его в папку, соответствующую пути в .torrent.

Ну что же, приступим к решению поставленной задачи.

Ищем торренты и читаем их

Начнем с самого простого момента — чтения .torrent.

Строение .torrent-файла довольно простое — он представляет из себя словарь в формате bencode. В данном словаре нас интересует только пара с ключом info — блок описания файлов. Этот тоже является словарем и содержит в себе информацию об имени файлов, их размере. Кроме того, как многим известно, торрент хеширует файлы не целиком, а по кускам определенной длины, которая зависит от размера этих файлов. Информация о размере этого куска также содержится в словаре info.

Для хранения информации из прочитанного файла будем использовать такой класс Torrent :

Здесь поля хранят следующую информацию:

* Name — имя торрента (вообще говоря — имя папки или имя файла)
* Files — список файлов, которые нам надо будет в дальнейшем искать
* PieceLength — размер тех самых кусочков, хеш которых нам предстоит считать
* Hash — хеш строка всех файлов
* FileName — имя .torrent-файла на диске

Теперь стоит заострить внимание на строке хеша. Она составляется очень просто. Все файлы склеиваются в один (виртуально конечно) друг за другом, образуя при этом один БОЛЬШОООООООЙ воображаемый файл. В этом воображаемом файле берем кусок длины PieceLength , считаем SHA1 хеш, кладем хеш в строку, берем следующий кусок, считаем хеш, дописываем к концу строки с хешем предыдущего куска. Т. е. это обычная конкатенация хешей всех кусков.


Как мог заметить внимательный читатель, файл внутри класса — это не просто файл, а особый тип данных, в котором файл описывается некой конструкцией типа LostFile . Вот она:

Здесь все просто: имя файла и его размер. Кроме того этот класс содержит еще одно поле — BeginFrom . Оно описывает начало этого файла в том БОЛЛЬШОООООМ воображаемом файле. Он нужен, чтобы взять правильную часть файла для подсчета хеша — ведь длина файла очень редко кратна длине куска.


Подготовив структуры для хранения необходимой информации, можно приступать к их заполнению.

С помощью найденной на просторах интернета библиотеки BencodeLibrary мы читаем наш .torrent-файл и выкорчевываем из него блок info:


Далее из этого блока необходимо забрать данные об имени торрента, размере куска.


В этом месте мы передаем в метод `BencodingUtils.DecodeFile` вторым параметром информацию о кодировке. Это как раз тот момент, когда пришлось добавлять один метод в библиотеку — изначально codepage-437 была вшита в код.

Мы добрались до самого интересного момента в этой части — чтение информации о файлах. Торрент файлы бывают двух типов. Эти типы различаются тем, сколько файлов в них описано. При описании только одного файла в .torrent пишется его имя и размер.

Сначала разберем .torrent с описанием одного файла.


Тут все просто — имя торрента совпадает с именем файла. В случае, когда файлов в раздаче много, то в поле name пишется имя папки, в которую их надо положить (на самом деле может быть что угодно, но почему-то все пишут имя папки в которой эти файлы лежали при создании). Кроме того появляется список files в котором содержится информация о каждом файле: путь к нему и размер. Если размер — просто целое число, то путь к файлу представляет собой список из строк (имен директорий), пройдя по которым мы увидим этот файл.

Такое лучше пояснять на примере. Для файлов level_1\level_2_1\file_1.txt и level_1\level_2_2\file_2.txt , если мы захотим их раздавать, поле name будет содержать имя папки верхнего уровня ( "level_1" ), а список path для одного из файлов будет следующего вида: и для другого.

Нам для .torrent с несколькими файлами надо путь до каждого файла собрать в одну строку. Кроме того, надо хранить начало каждого файла в том БОЛЬШООООМ (не забыли, правда же?!):

Очень важно отметить, что порядок следования файлов в БОЛЬШОООООМ файле может быть любым, не обязательно по алфавиту или по размеру. Но порядок файлов в списке files будет точно таким же. Это ключевой момент для понимания принципа хеширования. Для примера, в ситуации, изображенной на первом рисунке, список файлов будет следующим: . Таким образом, считая хеш одного файла, мы знаем какой файл надо будет брать следующим.

Когда мы все это дело прочитали и посчитали — давайте создадим и вернем экземпляр Torrent :


Собирая теперь все чтение и разбор .torrent-файла воедино, получаем:

Теперь, когда у нас есть все необходимые данные, мы готовы к самому интересному — поиску наших файлов.

Ищем файлы

Мы вплотную подошли к реализации второго шага нашего алгоритма. Для этого будем использовать метод FindFiles такого вида:


Здесь files — список файлов, среди которых мы будем искать, destinationPath — путь до папки назначения, в которую будут помещаться найденные файлы.

Для каждого файла в .torrent мы будем перебирать все файлы из кучи и их сверять. Так как проверка хеша довольно затратна, то надо сначала отсеять явно левые файлы. Ну посудите сами: если я качал дискографию в .mp3 и переместил ее, то явно не менял расширения файлов. Имя мог поменять, а вот расширение вряд ли.


Также стоит проверять длину файла, но это уже сомнительно и иногда может давать ложные срабатывания. Только после того, как мы отсеяли по расширению явно левые файлы, можно приступать к проверке хеша.


После того как проверка завершена, и мы удостоверились в соответствии файла искомому — перемещаем его в папку назначения с правильным путем. Перед перемещением будем естественно проверять наличие директории, а также проверим есть ли уже такой файл или нет. copyFile — переменная передаваемая с формы пользователем, ее назначение, я думаю, понятно всем.


Есть в коде выше три важных для пояснения момента. Начну с двух последних — вот эти строки:


Я посчитал вполне логичным убирать уже отсортированные файлы из рассмотрения, что позволит несколько сократить время выполнения поиска. Во второй строке есть конструкция .RemoveAt(i--); так как из коллекции убирается текущий элемент, то указатель надо сдвинуть назад, чтобы на следующей итерации цикла брался следующий элемент, а не через один.

Теперь про первый момент. Я знаю про наличие foreach для списка, но его при использовании нельзя модифицировать этот спикок, то есть мы не сможем удалять уже ненужные более элементы. Итак, собирая все выше описанное в один метод, имеем:

Ну вот! Самое вкусное.

Проверка хеша

Как видно из кода выше, для проверки хеша мы передаем имя файла на диске и номер файла в списке файлов торрента. Это надо для того, чтобы не запускать поиск в списке файлов, а сразу взять его по номеру, раз он известен (еще одно "+1" циклу for ).


Теперь приступим к реализации нашего метода проверки хеша. На данном этапе мы знаем номер в списке файлов торрента и путь до файла на диске

  1. Нет необходимости дополнительно искать на диске соседние файлы;
  2. Длина куска для хеширования очень редко превышает 2-4 МБ, что дает нам еще один плюс — с точки зрения производительности и времени, докачать такие файлы намного проще, чем искать их на диске.

Когда торрент-клиент проводит хеширование файлов, он считает хеш по порядку, однако бывает так, что нет одного или нескольких файлов. Тогда торрент-клиенту надо знать какой следующий кусок брать и откуда он будет начинаться в следующем имеющемся файле. Для вычисления двух этих цифр будем использовать следующий код, в котором переменная firstChunkNumber содержит номер первого куска, который полностью содержится в данном файле, а bytesOverhead — количество байт от начала файла до начала этого куска. Для лучшего понимания этого момента взгляните на поясняющий рисунок после кода.


Ответить на вопрос «Почему номер куска разный для случая, когда его начало совпадает с началом файла, и для случая, когда кусок лежит внутри?» предлагается самостоятельно.

Сейчас, зная номер куска мы должны взять его хеш из торрента с помощью такой конструкции:


После этого, надо прочитать кусок из файла и посчитать его хеш:


Ну и самое важное — его проверить. У меня, почему-то не захотел работать ни один из методов Equals() , которые я смог найти, поэтому проверяем так:


Собирая воедино сие творение возбужденного мозга, получим метод следующего содержания:

На этой прекрасной ноте, рассказ о методах и алгоритмах заканчивается, и мы переходим к рассказу о реализации в реальной жизни данного творения. Вполне понятно, что данная задача мной решалась не для того, чтобы решить, а для того, чтобы реализовать. Поэтому привожу на суд общественности мое творение, которое реализует все то, о чем написано выше.

Программа

В процессе работы, после окончания обработки очередного файла, выводится результат — имя .torrent-файла на диске и количество обработанных файлов.


Чтобы запустить сканирование, необходимо выбрать три директории (с файлами .torrent, с файлами для сортировки и папку для отсортированного), по желанию указать две опции и запустить сканирование.

По поводу производительности. Она пока что низкая: обработка 10 больших torrent-файлов заняла около 5 минут.

Так как работает приложение в один поток, то во время выполнения интерфейс подвисает, но я над этим работаю. Также хочу напомнить, что файлы малого размера (меньше 2-х мегабайт) не будут перемещены по причине отсутствия возможности проверки хеша. Вполне вероятны ложные срабатывания из-за того, что проверяется только один кусок под номером firstChunkNumber . Пока что проверять все куски слишком затратно, но в планах есть.

Не ищите торренты рекурсивно, если они собраны в корне диска.
Копирование может занять много времени, поэтому интерфейс может подвиснуть — не пугайтесь.

Так как писалась эта программа 4fun, то качество кода там немного не то, которое хотелось бы, но у меня оно работает. Данная программа не тестировалась, исправлялись только очевидные ошибки, поэтому могут быть, да что скрывать-то, есть скрытые баги. ИСПОЛЬЗУЯ ДАННУЮ ПРОГРАММУ, ВЫ ИСПОЛЬЗУЕТЕ ЕЕ НА СВОЙ СТРАХ И РИСК.

Взять исходники можно на github. Распространяется по GPLv2. Там есть архив с исполняемым файлом. Для работы требуется библиотека Bencode Library, но не оригинальная, а модифицированная мною (есть у меня в репозитарии, подключена субмодулем).

Спасибо всем, кто проявил терпение и дочитал эту статью до конца. Рад услышать ваши вопросы, приветствуется всевозможная помощь в совершенствовании алгоритма и, в особенности, кода.

UPD1. По результатам обсуждения мне стало понятно, что правильней будет не ломать существующие коллекции выдергиванием файлов на раздачу, а наоборот — создавать хардлинки в нужном для раздачи месте на файлы внутри упорядоченных коллекций (фильмо и дискографий, например). В дальнейшем программа будет работать именно так.

UPD2. Если у тех, кто пользовался этой утилитой, есть еще какие-то пожелания по функционалу или баг репорты, то прошу оставлять их на github в issue-трекере.


Если вы поклонник Ubisoft, то вы уже знаете об их настольном клиенте Uplay.

С Uplay вы можете в любое время получать доступ к вашим любимым играм и наслаждаться расслабляющей игровой сессией на ПК с Windows 10.

Но иногда, если вам нужно дополнительное место на жестком диске , вы должны перенести свои игры на другой диск. Или, может быть, вы купили новый компьютер с Windows 10 и хотите перенести свои игры на него.

Если у вас есть SSD , то стоит переместить игры туда, так как это сделает их более быстрыми, а время загрузки значительно улучшится.

Но чтобы получить какой-либо прирост производительности , вам сначала нужно его переместить. Продолжайте читать, чтобы узнать, как вы можете легко перенести свои игры на другой диск или компьютер.

Uplay как перенести игры на другой диск / компьютер

1. Вручную переместите файлы игры

перенести uplay игры на новый диск

  1. Полностью закройте Uplay . При необходимости перейдите в диспетчер задач и завершите любой процесс, связанный с Uplay.
  2. Теперь перейдите в папку, в которую вы установили свою игру, которую вы хотите переместить.
  3. Скопируйте папку с игрой (или всю вашу папку Uplay) и вставьте ее на новый диск / раздел. Убедитесь, что вы используете копию, а не обрезку , просто для резервного копирования на случай, если что-то пойдет не так.
  4. После того, как вы скопировали папку, вернитесь в исходную папку (исходную папку игры или исходную папку Uplay) и переименуйте ее , добавив что-то вроде «bak» или «old».
  5. Если вы перенесли только игру, просто запустите Uplay . Если вы переместили всю папку Uplay, обновите ярлык Uplay, чтобы он указывал на файл uplay.exe с вашего нового диска / раздела. Затем откройте Uplay .
  6. Когда запускается Uplay, он проверяет местоположение папки установленных игр. Поскольку вы переименовали папку с игрой, Uplay будет думать, что игра не установлена. В Uplay перейдите в « Игры» > « Мои игры» > найдите свою игру в списке> щелкните по ней .
  7. На странице игры в разделе «Загрузка» нажмите « Найти установленную игру» и укажите ее в новом месте, куда вы скопировали свою игру, и на новый диск / раздел.
  8. Появится окно, и все будет идти по плану. Должно быть, все игровые файлы были успешно проверены .

Если у вас есть несколько игр, вам придется повторить процесс для каждой из них.

2. Переместите игры Uplay на другой компьютер, переустановив клиент

перенести uplay игры на другой ПК

  1. Если вы хотите перенести свои игры на другой компьютер, сначала вам нужно установить Uplay на новый компьютер.
  2. Загрузите последнюю версию Uplay с официального сайта Ubisoft .
  3. После этого запустите установщик с правами администратора .
  4. Следуйте инструкциям на экране мастера установки и после его завершения перезагрузите компьютер .
  5. Теперь вам нужно будет вручную создать резервную копию файлов сохранения Uplay. На старом ПК перейдите в каталог установки Uplay по умолчанию и найдите папку savegames .
  6. Щелкните правой кнопкой мыши папку «Savegames» и выберите « Копировать» .
  7. Вставьте папку на флэш-накопитель, чтобы переместить ее на новый компьютер.
  8. Вставьте флэш-диск в новый компьютер и скопируйте папку savegames в папкуUbisoft Game Launcher .

Вот и все. Как видите, не так сложно перенести свои игры на новый диск / раздел или даже на новый компьютер с Windows 10. Просто следуйте указанным шагам, и все будет сделано в кратчайшие сроки.

Не забывайте всегда создавать резервные копии ваших файлов , на случай, если что-то пойдет не так.

Если у вас есть другие предложения или вопросы, не стесняйтесь обратиться к разделу комментариев ниже.

SnowRunner + все дополнения

Разработчики не стали повторять того же, что уже было в предыдущих играх, и теперь решили сместить сеттинг в сторону Аляски. В этот раз вас ждут уже новые приключения, новые карты, новая физика и графика, и самое главное, новые условия, в которых вам придется трудиться на действительно реалистичных автомобилях.

И первым делом стоило бы сказать о том, что в SnowRunner вас будет ждать три игровых локации и более 15 игровых карт, каждая из которых в разы больше размерами, нежели все карты из оригинальной первой игры. Часть событий игры будет происходить на просторах заснеженной Аляски, а часть на просторах осенней Миннесоты.

Отдельно же стоило бы сказать о том, что теперь условия игры изменились до неузнаваемости. Если раньше вашими главными врагами были болота и грязь, то теперь вы столкнетесь с новыми врагами – ими станут такие природные явления как снег, лед, и обледеневшие дороги. Управлять транспортным средством в таких условиях будет очень нелегко, поверьте, и разработчики сделали все возможное для того, чтоб сделать и сами условия, и управление транспортом максимально реалистичными. Также, если скачать SnowRunner торрент со всеми дополнениями, то вы сможете опробовать помимо стандартных автомобилей ещё и новые.




Конечно, не обошлось и без других новшеств. Так, ассортимент автомобилей теперь пополнился крутыми автомобилями западного производства, а также, огромным количеством приспособлений, оборудования и аксессуаров, которые можно будет использовать. А еще вас ждут десятки заданий, режим песочницы, аркадная сюжетная кампания, и многое другое.

Попробуйте себя в новых условиях бездорожья, сядьте за руль одного из транспортных средств, обвесьте его всеми приборами, что могут пригодиться вам в пути, и отправляйтесь навстречу приключениям…
У нас вы можете скачать SnowRunner + все дополнения торрент последнюю версию бесплатно на компьютер.

Установка:
1. Скопировать содержимое раздачи в любое место на диске
2. Скопировать содержимое папки Crack в папку c игрой, заменить.
3. Запуск игры с файла RUN GAME.bat по пути SnowRunner\en_us\Sources\Bin (для таблетки Nemirtingas)
3. Запуск игры с файла SnowRunner.exe по пути SnowRunner\en_us\Sources\Bin (для таблетки nEOS)

Таблетки от CODEX и эмулятор nEOS используют разные пути сохранений, поэтому чтобы не потерять прогресс при переходе с одной таблетки на другую нужно сделать следующее:
- Идите в "Мои документы" по пути C:\Users\Ваш Username\Documents
- По пути \My Games\SnowRunner\base\storage создайте папку с именем "0" (ноль, цифрой, без кавычек)
- Там же в папке storage будет папка "1638", из неё скопируйте всё содержимое в созданную папку "0" чтобы вы продолжили прогресс
- Последний пункт также актуален если вам нужно будет наоборот перейти с nEOS на CODEX

Дополнения (DLC):
- Navistar 5000 MV Tractor
- High Roller Pack
- Loaded Dice Vinyl Wrap
- Scorched Vinyl Wrap
- True Colors Vinyl Wrap
- Derry Longhorn 4520 Sabertooth Livery
- TUZ 16 “Actaeon”
- Ford 750 4x4 CrewCab
- Season Pass Phase 1: Search & Recover
- Season Pass Phase 2: Explore & Expand (includes 2 Canadian Yukon maps)
- Season Pass Phase 3: Locate & Deliver
- Season 4: New Frontiers
- Season 5: Build and Dispatch
- Clasico Pack (Chevrolet Apache 6x6)
- Western Star 49X
- Sabertooth Livery
- Anniversary DLC
- GMC Brigadier
- Burning Bright Vinyl Wrap Pack
- TATRA Dual Pack
- Jeep Dual Pack
- Year 1 Pass
- Year 2 Pass

Читайте также: