PDA

Просмотр полной версии : Очистка игры от неиспользуемого контента


RC_Vinchenzo
04.03.2009, 22:12
Возникла идея написать софтину, чтобы почистить игру от неиспользуемых локов и вагонов, потому как места они стали занимать прилично. Может кто-то уже разбирался в этом, неохота изобретать велосипед во второй раз: вагоны и локи статики записаны прямо в сценариях, причем некоторые записаны повагонно, а некоторые - ссылками на сервисы, в которых даны ссылки на консисты; файлы траффика содержат только ссылки на сервисы. Все верно? Ничего не забыл?

ТЧМ3 Леха
04.03.2009, 23:36
А Train Store не пробовал использовать для этого?;)

RC_Vinchenzo
04.03.2009, 23:40
Пробовал, но ТрейнСтор выполняет несколько иные функции. Мне нужно убрать неиспользуемые локи и вагоны из игры, чтобы уменьшить ее объем. ТрейнСтор только выводит энги, ваги и консисты, этого недостаточно, я же хочу чтобы убирались папки целиком. :)

awaken
05.03.2009, 01:52
я просто переношу неиспользуемые локи, консисты, и маршруты целиком в другие папки.
у меня сейчас всего 3 маршрута стоит (зилупе , александрово и один самопальный), и все быстро запускается

RC_Vinchenzo
05.03.2009, 06:17
Скорость запуска не при чем, уменьшить ее помогает ТрейнСтор, просто при размере игры в 140 гигов "балласт" из неиспользуемых локов получается существенным. Меня сейчас главным образом логика размещения ссылок на ПС в сценариях интересует, верно ли я ее понял и описал?

awaken
05.03.2009, 19:28
у трейнстора есть свои проблемы, вроде бы он с космосом не совместим.
а я использую космос

DeBUG
05.03.2009, 19:56
Ищи может будет такая программа: www.railserve.com/Computers/MSTS/Utilities/

Если напишешь, то делай, как СУБД с возможностью вывода информации в нужной форме. Уже писали про использования SQLite и прочего, а программу для сортировки и выборки, как правило пишут на скриптах, это особенно относиться к *nix и всяким PHPстам, Pythonистам и пр. web-человекам.

awaken
08.03.2009, 14:19
а некоторые - ссылками на сервисы, в которых даны ссылки на консисты; файлы траффика содержат только ссылки на сервисы. Все верно? Ничего не забыл?

файл Activity (.act) содержит
это сервис игрока:
Player_Service_Definition ( "szd_player_srv 20"
это сервис траффика:
Traffic_Definition ( "szd_traffik2 "
Service_Definition ( szd_traffik_srv1 31800

и некоторое количество статических вагонов/составов

сканируем сервисы, составляем список файлов:
"szd_player_srv 20.srv"
"szd_traffik_srv1.srv"
"szd_traffik_srv2.srv" и т.д.

в srv файле ищем строчку:
Train_Config ( "szd_2TE10M-3373 2975 40 mix1" )
это имя .con файла состава.

далее составляем список используемых консистов.
и из них вырезаем список использованных локов/вагонов, сливаем его с дргим списком (из самого сценария)

важно сохранить двухстроннюю связть "единица ПС" <-> "con файл"
для этого лучше наверное завести небольшую реляционную базу данных, как выше посоветовали

DigitOn
23.03.2009, 02:22
Итак, тулза была написана в соответствии с описанием, которое предоставил RC_Vinchenzo.

Суть программы:
Программа предназначена для разделения установленного в игре ПС на 2 части - используемую в установленных сценариях и неиспользуемую.

И более подробное описание (алгоритм):
Программа сканирует папки маршрутов ACTIVITIES и SERVICES на файлы *.act и *.srv соответственно.
Файлы Activities сканируются на строчки вида:
EngineData (имя_файла имя_папки )
WagonData (имя_файла имя_папки )
Отсюда берутся имена папок подвижного состава. Эти папки переносятся из TRAINSET во временную папку TRAINSET_TEMP (в том же каталоге TRAINS).
Из файлов Services программа извлекает список файлов Consists (из строчек Train_Config(имя_консиста) ), которые также как и файлы Activities сканируются на EngineData и WagonData, и папки с подвижным составом также переносятся в TRAINSET_TEMP. Найденные файлы Consists переносятся из CONSISTS в CONSISTS_TEMP.
По окончании процесса папки TRAINSET и CONSISTS переносятся в папки TRAINSET_UNUSED и CONSISTS_UNUSED соответственно, а TRAINSET_TEMP и CONSISTS_TEMP в TRAINSET и CONSISTS.

В результате мы имеем папки:
CONSISTS, TRAINSET - в них хранятся используемые в сценариях единицы ПС.
CONSISTS_UNUSED, TRAINSET_UNUSED - а тут неиспользуемые единицы ПС.

Программа была протестирована мною, а также RC_Vinchenzo на его 160 гиговой сборке MSTS. Найденные ошибки были устранены, поэтому вывожу программку на всеобщее обозрение.

Вот собственно и все. Пожелания/рекомендации/критика крайне приветствуются! :)

P.S. Скачать пока нигде нельзя, благодаря системе защиты от спама. RC_Vinchenzo, выложи пожалуйста сам...

RC_Vinchenzo
23.03.2009, 06:13
Утилита (http://www.rapidshare.ru/975729)

Для работы необходим Microsoft Visual C++ 2008 SP1 Redistributable Package
x86 (http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en)
x64 (http://www.microsoft.com/downloads/details.aspx?FamilyID=ba9257ca-337f-4b40-8c14-157cfdffee4e&DisplayLang=en)

при моих данных:
папка с игрой 159 гб
роутс 97,2 гб
трейнс 60,5 гб
Прога пробежала этот объем где-то за 10 минут, выделив 25,5 Гб неиспользуемого ПС. Одним словом чудо, а не утилита.

RC_Vinchenzo
24.03.2009, 13:03
нашелся неприятный глюк, если кто-то скачал, не спешите пользоваться.:(

malchik
24.03.2009, 13:16
ждем-с

Ким Чен Ир
24.03.2009, 13:20
у трейнстора есть свои проблемы, вроде бы он с космосом не совместим.
а я использую космос
ОФФ. Да вроде совместим, проблем не замечал. Обычно делаю так, запускаю нужный роут через трэйн стор, потом закрываю мстс, открываю космос, делаю нужную погоду и снова запускаюсь, либо опять через трэйнстор, либо сразу мстс.

DigitOn
25.03.2009, 17:07
нашелся неприятный глюк, если кто-то скачал, не спешите пользоваться.:(

Скорее не глюк, а недоработка в логике работы :) Впрочем скоро будет новая версия.

RC_Vinchenzo
30.03.2009, 23:07
Версия 1.2 билд 0002 (http://depositfiles.com/files/hx4emk1wq)
тестим :)

Модер, потри пожалуйста предыдущий пост.

DeBUG
30.03.2009, 23:59
Занятно. Рекомендую отметиться на зарубежном ресурсе. Больше проживет программа и фанов порадует.

RC_Vinchenzo
31.03.2009, 05:29
DeBUG
Рановато на зарубежный :) там сейчас Digit-On хелп прикручивает и кнопку "вернуть все как было". Если есть какие-то пожелания по интерфейсу - излагайте пожалуйста.

malchik
31.03.2009, 07:44
Итак, на выходе я получаю log.txt с кучей букв и цифр и если
неиспользуемого ПС много, то разгрести такой файл крайне проблематично)))
В более наглядном и удобном для чтения формате результат можно вывести?

RC_Vinchenzo
31.03.2009, 07:51
malchik
Какую форму ты считаешь более удобной? Что бы ты хотел там видеть?

malchik
31.03.2009, 09:54
malchik
Какую форму ты считаешь более удобной? Что бы ты хотел там видеть?

Чтобы список вываливался типа того, который получается
при использовании Активити Мастер на проверку наличествующего
ПС в сценариях...

Кстати, а почему бы не сделать так программу, чтобы она
по типу ТрэинСтор перекладывала неиспользуемый ПС в
отдельную временную папку с возможностью возврата его
в случае необходимости?

DigitOn
31.03.2009, 18:33
malchik, Активити Мастер выдает список используемого ПС в сценарии с указанием наличия/отсутствия этого ПС. В нашей же программке в лог пишутся для каждого маршрута только те ПС которые были перенесены к нужным на данном этапе, если они были перенесены в "нужные" в результате обработки предыдущих маршрутов, то они туда не попадают. Однако, если включить опцию "Ошибки открытия файлов", то можно будет увидеть для каждого маршрута весь нужный ПС, только тот что уже был перенесен, будет отмечен ошибками открытия файлов.

Хочу еще заметить, что в отличии от Activity Master, программа не определяет список ПС для каждого сценария в отдельности на основе цепочки обработки файлов Активити->Траффик->Сервис. Программа обрабатывает отдельно папки с файлами ACT и SRV! Из ACT она берет лишь статичный ПС, а из SRV уже весь остальной.
Почему так!? - Потому что мы посчитали лишним строить список ПС для каждого сценария. Целью является построение списка используемого ПС для сценариев маршрута в целом, а, поскольку, в папке SERVICES все таки ничего лишнего быть не должно (только сервисы используемые в сценариях этого маршрута), то список нужного ПС берется напрямую из файлов сервисов + к этому список статичного ПС из файлов активити.

Поэтому в лог файл можно лишь вывести либо нужный ПС для всего маршура в целом, либо отдельно нужный ПС, найденный в файлах Activity (статичный), и ПС, найденный в файлах Services.

Чтож, попробую сделать лог-файл более удобочитаемым. Спасибо за пожелания и замечания! Постараюсь сделать лучше :)

А что касается перекладывания ПС во временную папку, собственно программа это и делает, неиспользуемый ПС перекладывается в папки: TRAINSET_UNUSED и CONSISTS_UNUSED. Обратное действие также уже реализовано, будет в новой версии. В ближайшее время постараюсь все доделать и выложить.

DeBUG
31.03.2009, 21:28
Основа это чистка игры, от этого и отталкивайтесь, всё остальное это только трата времени. Нужна главная функция.

RC_Vinchenzo
31.03.2009, 21:40
А результаты в общем-то очень хорошие, у меня, как у среднестатистического юзера МСТС, "ненужными" оказались около 30% (19.4 гб) папки TRAINSET (до "разделения" весила 60 гб). Взвешивайте папки и выкладывайте свои результаты. Посмотрим, существенно ли прога может облегчить игру у среднего пользователя.