Создание GCF-кэша!!!

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#31 Сообщение 09.06.2008, 00:08

fire64 писал(а):andreil, ты это читал ?
http://www.tommunism.net/wiki/GCF_Format
Читал.... Но нифига не поянл :( (с инглишем проблемы ;) )
А так я уже понял ВСЮ структуру GCF, кроме GCFDirectoryEntry. Просто это - элемент дреовидной структуры и у меня где-то косяки с правильным присваиванием родителя/детенка (игра слов ;) )
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
Kein
Капитан
Капитан
Сообщения: 367
Зарегистрирован: 21.04.2008

#32 Сообщение 09.06.2008, 05:24

Почитал, там практически полностью расписана структура GCF-файла. Все, что обычный английский - мне понятно, а вот технический язык... >_>

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 43 раза
Контактная информация:

#33 Сообщение 09.06.2008, 11:41

Entries
Это массив, причем размеру GCFDirectoryHeader.ItemCount.

Код: Выделить всё

[b] struct GCFDirectoryEntry { DWORD NameOffset;     DWORD ItemSize;     DWORD ChecksumIndex;     DWORD DirectoryFlags;     DWORD ParentIndex;     DWORD NextIndex;     DWORD FirstIndex; }[/b] 
NameOffset определяет смещение в таблице, где название пункта находится. C string .
ItemSize определяет размер пункта. Если элемент файла, то это количество байтов в файл, в противном случае, если элемент каталога, то количество файлов в каталоге.
ChecksumIndex определяет индекс контрольные суммы для файлов в контрольной карте. Если элемент папку, а затем это значение 0xFFFFFFFF.
DirectoryFlags определяет различные флаги для пункта. Речь идет в настоящее время известны флаги:
# 0x00004000 - Этот пункт является файл.
# 0x00000800 - Этот пункт является исполняемым файлом. (Непроверенный)
# 0x00000400 - Этот пункт является скрытым. (Непроверенный)
# 0x00000200 - Этот пункт только для чтения. (Непроверенный)
# 0x00000100 - Пункт, в зашифрованном виде.
# 0x00000080 - Данный пункт очистки файла. (Непроверенный)
# 0x00000040 - Backup пункта до переписав его. Версионных УНЦ File (Непроверенный))
# 0x00000020 - Данный пункт не кэш-файла. (Непроверенный)
0x0000000a - Этот пункт должен быть скопирован на диск. (Это на самом деле сочетание запустить файл блокируется и флаги.)
# 0x00000008 - Вопрос закрыт. (Непроверенный)
# 0x00000002 - Этот пункт является запуск файла. (Непроверенный)
# 0x00000001 - Этот пункт является пользователем файла конфигурации. Не перезаписывать пункта, если скопировать его на диск и пункт, уже существует.

Аватара пользователя
olegv11
Полковник
Полковник
Сообщения: 2329
Зарегистрирован: 16.03.2007
Откуда: От мамы

#34 Сообщение 09.06.2008, 12:20

fire64
Переведи сам, не с помощью гугла, ведь глупо звучит "Речь идет в настоящее время известны флаги".
Изображение
Garry Newman писал(а):Atheists don't hate religious people, they just think they're stupid.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#35 Сообщение 09.06.2008, 13:01

fire64 писал(а):Entries
Это массив, причем размеру GCFDirectoryHeader.ItemCount.

Код: Выделить всё

[b] struct GCFDirectoryEntry { DWORD NameOffset;     DWORD ItemSize;     DWORD ChecksumIndex;     DWORD DirectoryFlags;     DWORD ParentIndex;     DWORD NextIndex;     DWORD FirstIndex; }[/b] 
NameOffset определяет смещение в таблице, где название пункта находится. C string .
ItemSize определяет размер пункта. Если элемент файла, то это количество байтов в файл, в противном случае, если элемент каталога, то количество файлов в каталоге.
ChecksumIndex определяет индекс контрольные суммы для файлов в контрольной карте. Если элемент папку, а затем это значение 0xFFFFFFFF.
DirectoryFlags определяет различные флаги для пункта. Речь идет в настоящее время известны флаги:
# 0x00004000 - Этот пункт является файл.
# 0x00000800 - Этот пункт является исполняемым файлом. (Непроверенный)
# 0x00000400 - Этот пункт является скрытым. (Непроверенный)
# 0x00000200 - Этот пункт только для чтения. (Непроверенный)
# 0x00000100 - Пункт, в зашифрованном виде.
# 0x00000080 - Данный пункт очистки файла. (Непроверенный)
# 0x00000040 - Backup пункта до переписав его. Версионных УНЦ File (Непроверенный))
# 0x00000020 - Данный пункт не кэш-файла. (Непроверенный)
0x0000000a - Этот пункт должен быть скопирован на диск. (Это на самом деле сочетание запустить файл блокируется и флаги.)
# 0x00000008 - Вопрос закрыт. (Непроверенный)
# 0x00000002 - Этот пункт является запуск файла. (Непроверенный)
# 0x00000001 - Этот пункт является пользователем файла конфигурации. Не перезаписывать пункта, если скопировать его на диск и пункт, уже существует.
Можно подумать, я это не знаю? Только я практически до всего сам доходил.
Единственное, с чем у меня там проблемы при создании кэша - это правильное наследование узлов, ибо все идет по рекурсии (а рекурсия - удел богов :crazy: )
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
Kein
Капитан
Капитан
Сообщения: 367
Зарегистрирован: 21.04.2008

#36 Сообщение 10.06.2008, 09:57

А смысла нет. Статья, в основном, рассказывает о структуре CGF-формата в ключе парсинга его, а не создания системы файлов.
Да и как уже andreil сказал - он все это знает.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#37 Сообщение 10.06.2008, 15:01

Для ясности и чтобы народ не путался: ВСЕ программы (тот же GcfImporter/Exporter) умеют делать GCF, только зная его шаблон (те имея его структуру - часть заголовка). Моя же прога делает GCF БЕЗ шаблона, создавая его сама. В этом-то и вся соль, поскольку нюансов заполнения шаблона более чем достаточно.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
SynchronE
Нович0к
Нович0к
Сообщения: 18
Зарегистрирован: 23.06.2008

#38 Сообщение 27.06.2008, 23:11

andreil: почитал форум и тоже хочу юзербар andreil fan
Может всё же выложишь своё творение ?

P.S: GcfImporter/Exporter ну никак нийти невозможно. Cs.rin.ru уже содрогается от моих поисков ^_^ Не говоря уж об этом форуме :)

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#39 Сообщение 27.06.2008, 23:30

SynchronE писал(а):andreil: почитал форум и тоже хочу юзербар andreil fan
Может всё же выложишь своё творение ?

P.S: GcfImporter/Exporter ну никак нийти невозможно. Cs.rin.ru уже содрогается от моих поисков ^_^ Не говоря уж об этом форуме :)
1) :D
2) Пока нет, тк только недавно освободился от учебы (ЦИТАТА: "Группа ЭЛ16-04 отчисляется из учебного заведения... (у всех отвисли челюсти).. в связи с окончанием обучения!" (наш зав.отд.)
3) Они там есть в отдельной теме SteamCooker'a ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
SynchronE
Нович0к
Нович0к
Сообщения: 18
Зарегистрирован: 23.06.2008

#40 Сообщение 28.06.2008, 14:30

Они там есть в отдельной теме SteamCooker'a
Ну никак не вижу :dash: Ссылочку ? :blush:

Аватара пользователя
Kein
Капитан
Капитан
Сообщения: 367
Зарегистрирован: 21.04.2008

#41 Сообщение 28.06.2008, 20:01


Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#42 Сообщение 06.07.2008, 17:37

Итак, работы над проектом возобновлены.
В качестве разминки сделал аналог GcfImporter'a, только свой + полностью GUI-вый. Сейчас идут последние тесты + работа над ускорением упаковки.
Упаковывает все на отлично, только вот на совместимость со Стимом не проверял - нету времени, да и интернет слабоват для этого.

Размер программы - 53Кб (44Кб без иконки).

----------------

Все, вроде как рабочая версия (проверял на "episode two maps.gcf", "half-life 2 lost coast russian.gcf", "team fortress 2 content.gcf").

Самый главный тест - это как Стим примет обработанную GCF-ку.
ВНИМАНИЕ!!! НЕ СОЗДАВАЙТЕ НОВЫЙ ОБРАЗ ТАМ, ГДЕ У ВАС ЛЕЖИТ ОРИГИНАЛЬНЫЙ АРХИВ, ПОСКОЛЬКУ ОН БУДЕТ ЗАТЕРТ!!!

----------------

Инструкция:
  • 1) Создаем мини-GCF. Здесь ничего пояснять не надо :)
  • 2) Создаем новый GCF-архив из мини-GCF'a и распакованных файлов. В первом поле соотв. пункта вводим путь к распакованным файлам, а во втором - наш мини-GCF, созданный в предыдущем пункте.
Стоит заметить, что новый GCF-архив создается там же, где лежит мини-GCF, так что будьте осторожны, не делайте это все в папке с оригинальными архивами (разве что у Вас есть бэкап архива).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
Kein
Капитан
Капитан
Сообщения: 367
Зарегистрирован: 21.04.2008

#43 Сообщение 06.07.2008, 20:46

Теперь ждем оригинальный пакер :P

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#44 Сообщение 07.07.2008, 12:01

Надо сперва потестить то, что есть, ибо, если в этом будут ошибки, то и в пакере будут ошибки ;)
А эта прога оччень поможет тем, у кого есть распакованная пиратка, но хочется заиметь GCFы ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
VoVa
Сержант
Сержант
Сообщения: 40
Зарегистрирован: 19.07.2006
Откуда: Днепродзержинск
Контактная информация:

#45 Сообщение 07.07.2008, 15:00

andreil
Ну ты даешь :) Пасиба!
маленький бок
[spoiler=""6kb""]Изображение[/spoiler]
Изображение
все обновления находятся здесь
и здесь
Помогите найти
team fortress 2 client content.11_to_12.update
team fortress 2 materials.5_to_6.update
team fortress 2 content.12_to_13.update

Закрыто