Добро пожаловать Гость, Вы в разделе: Вход

Энциклопедия по редактору Arma, Arma 2, Arma 3 и Operation Flashpoint

VKRSSRSS
На главную

Навигация


Искать в энциклопедии:
»


Важная информация




Сайт управляется

Учебник по написанию скриптов
Изображение



Учебник по созданию роликов


Изображение



Наши партнеры



ArmA 3, ArmA 2 news Russian community, SARMAT community

Pbo

RSS
Изменено 02/05/2013 21:44 Mikezar Категоризировано Аддоны

Расширение PBO

Введение

Первоночально, формат PBO расшифровывался, как "архив упакованных фалов". Сокращение может быть прочитано так же как "Объект Упакованный Бохемией". На протяжении его использования этот формат стал представлять собой единый "пакет" для архивирования конечных объектов, таких как миссия, или аддон.

Pbo файл создается в редакторе миссий, в ходе так называемого "экспортирования " и содержит не больше (и не меньше ) тех файлов и папок, которые были включены в процессе создания миссии, кампании или же аддона.Это отдельный файл, в который включено множество папок. Итак, чтобы вы поняли это окончательно, все что вы сделали в своей папке, с миссией, кампанией или аддоном, может быть легко упаковано в один файл, который называется Pbo.

Кроме того, игра будет запускать равноценные не -pbo форматы миссий или кампаний, но только не( к сожалению) Аддоны. Аддоны обязательно должны быть в формате Pbo для того, чтобы игра могла их использовать.

Сжатие

Помимо того, что все файлы упаковываются в цельный архив, некоторый из них, или все, или же ни один - могут быть сжаты. Причем это вовсе не обязательно, сжимать файлы. Среди разнообразных программ для сжатия Pbo файлов, можно выделить MakePbo, который был разработан Amalfi. Идея по сжатию файлов использовалась при работе с интернетом, а в "старые добрые времена" еще и снижала жесткие требования к хранению на диске. Фактическое использование сжатия ( наболее простая форма запуска кодирования отрезка) становится все менее «популярной»,по скольку нагружает игру.Ни Operation Flashpoint Elite, ни ArmA,не может работать с сжатыми pbo-файлами.

Binarised raP

Определенно config.bin , и часто config.cpp и / или mission.sqm хранятся в двоичной форме. Двоичная форма не имеет никакого отношения к структуре PbO, и не является частью PbO компрессии / декомпрессии алгоритма. Данные для mission.sqm, действительно могут быть сжаты в расширении PbO, но как правило конечный результат очень часто представляет из себя raPified версию оригинального текста mission.sqm. Далее необходимо декодирование при помощи таких утилит как bin2cpp и cpp2bin.

Основная структура

Структура файла PbO предельно проста. Она включает в себя:
  • верхний колонтитул включающий смежное имя файла;
  • верхний колонтитул включающий смежный блок данных;
  • контрольная сумма ( (один из способов обеспечения защиты и осуществления контроля целостности данных, используемый, напр., в пакетах TCP/IP)) или уникальный ключ (ArmA)

Заголовок (верхний колонтитул ) определяет каждый файл, содержащийся в PbO, его размер, информацию, которая в нем содержится, имя, будь то оно в сжатом состоянии, и где файл "находится " в последующем блоке данных. Каждый файл, даже те, которые имеют нулевую длину, записываются в заголовке и каждый из них получает статус "записанный". Записи, а следовательно, и сам 'файл' , к которому они относятся, являются смежными.

Однако, обратите внимание на то, что не предусмотрено, и нет возможности, хранить пустые папки. Папки являясь частью файлов - на них просто ссылаются. Если папка не содержит записей, то как следствие пустые папки , не могут быть включены в PbO, потому что нет файла связанного с ними. Иными словами, пустая папка, если она может храниться (а это не возможно),окажется без имени при распоковке PBO.

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

Вступительный заголовок PBO

Стандартная запись PBO, выглядит следующим образом:
 Структура записи.
 { 
 Asciiz filename; //нулевая строка, определяющая путь и имя файла,
 // указывает относительно этого pbo
 //Нулевая длина имен файлов ('\ 0') указывают первой (обязательно), или последней (не обязательно) записью в заголовке.
 // Другие поля в последней записи заполняются нулями. 
 ulong PackingMethod; //0x00000000 несжатый
 //0x43707273 упакованый
 //0x56657273 товарный знак (resistance/elite/arma)
 ulong OriginalSize; // Распакованный: 0 или же значение, что и в DataSize

 // Упаковка: Размер файла после распаковки.
 // Это значение необходимо для байтовой границы распаковки 
 //Распоковка сама по себе может привести к потери до
 // До 7 дополнительных байт. 
 ulong Reserved;
 ulong TimeStamp; // предназначен для FILETIME UNIX от 1 января 1970 +, но чаще всего 0 
 ulong DataSize; / / размер блока данных. 
 / / Это также размер файла без упаковки 
 };

Незначительные записи

Записи не имеющие названия указывают границы.Очевидно одним из которых являет конец заголовка.
Есть два вида "границ", используемых в заголовках PbO.
*Расширение заголовка, находится только в Сопротивление / ARMA / elite-PbO/li>
*Конец заголовка

Конец заголовка, обязателен для заполнения. Это обычно указывается остальными элементами также равными нулю в структуре. Тем не менее, иногда рассматривается "подпись" 0x43707273 в процессе компресии целого файла PbO .Так же указывается , что некоторые, никакие,или все, PbO сжимаются, что является довольно бесполезным
Дело в том, что это не имеет очень большого значения. Определение конца заголовка, и, когда он применяется, определение начала заголовка устанавливается именем фала без имени.Содержание этих записей не имеет значения, по скольку игровый движок их просто не использует. Однако некоторые производители третьей серии аддонов, рассчитывают на то, что большинство инструментов PbO по извлечению информации, полагают, что поля будут равны 0 (даже если они не имеют значения). Таким образом, это предотвращает некоторые PbO файлы от извлечения подобными инструментами.

Расширение заголовка

Расширение заголовка случается в первой записи на всех NON CWC PbO
Если на данный момент (и это * является * не обязательным) это ПЕРВАЯ запись в заголовке. Она расширяет запись!
структура записи
{
 // стандартная записи
 Asciiz filename; // = 0
 ulong PackingMethod; //=0x56657273 Product Entry (resistance/elite/arma)
 ulong OriginalSize; // =0
 ulong Reserved;//=0
 ulong TimeStamp;//=0
 ulong DataSize; //=0
 // конец 'стандартной' записи
 struct HeaderExtension
 {
 Asciiz String;
 ............
 Asciiz String; // '\0' обязательно последняя (или единственная) запись
 };
 };

Обратите особое внимание, что некоторые поставщики аддонов предоставляют их б ез н улевых полей в одном или же в обеих специальных записей, чтобы запутать DePbo инструмент."Ключ", который нельзя обойти т.к он имеет нулевую длину имени файла, представляет собой специальную запись.
В данной записи может быть множество строк, или по крайней мере часть строки.
В этой записи может существовать на столько много строк записей, сколько инструмент, который создает PbO файл, этого захочет!
Последняя (или единственнаяя!) Строка - это нулевая длина заканчивающаяся символом конца строки (null terminator). Например, '\ 0'
Сопротивление и Arma Pbo используют только три строки записи (послед не й записью является "\ 0 ')
Однако производители аддонов делают попытки ввести в заблуждение depbo инструмент путем увелечения или уменьшения объема.Строка записи в этой структуре ломает инструмент.

Arma Pbo

Armed Assault PbO в настоящее время идентичен с Operation Flashpoint Elite PbO, в структуре, за исключением не больших различий.
5 допольнительных "контрольная сумма" байт в конце непрерывного блока данных Elite PbO расширили до 21 байт. Это файл называется хэшом.Первый байт в таких типах pbo файлах всегда равен нуль.
Альтернативный заголовок Сопротивления, впервые введенный в Elite, указывает "виртуальную" ссылку на файл в отличии от реального имени PbO (который может меняться).
Традиционный метод в OFP для доступа к внешним аддоны из других аддонов, выглядит так:

model=\AnotherAddon\SomeModel.p3d;

В Arma, это было изменено в:

model=\AnotherVirtualAddon\SomeModel.p3d;

Практические аспекты, которых, большинство в 3-ей партии моделей, будут "видимы",но это не имеет значения по-скольку они не будут изменять префикс (виртуальный) имени,самого pbo

Сжатие данных

Сжатие данных в ofp является умеренным, но эффективным, форма запуска кодирование длины (LZH), позволяет (вплодь до) 4k повторять предыдущие данные.
Следующий код также распространяется на метод упаковки, применяемый в WRP (OPRW) и pac/paa файлах, которые не имеют заголовка информации, просто являются блоком известной выходной длины, которая должны быть расшифрована. В любом случае, размер ВЫВОДА известен. С PbO, размером ВХОДа является только определение границ на следующий блок сжатых данных. Не используется иначе говоря относится к расшифровке данных, поскольку (вплодь до) 7 остаточный байт может существовать в последнем слове блока. Таким образом, только конкретные фиксированные размеры ВЫВОДА являются значимыми.
Сжатие данных блока в смежных 'пакетах' различной длины:
block {packet1}...{packetN} {4 байта контрольной суммы}
.
packet
{
byte Format;
byte packetdata...; // нет фиксированной длины
}
Содержание пакета данных включает смесь исходных данных, которые передаются непосредственно на выход, и, 2byte указателей.
Формат: значения бита определют, какие пакеты данных существуют. Это объясняет LSB ( самый младший (двоичный) разряд)
BitN =1 - добавить байт непосредственно к файлу (чтение одного байта)
BitN= 0 - указатель (чтение двух байтов)
к примеру:
формат байта - 0x45, двоичное представление: 01000101.
Три байта находится в блоке сразу же после формата флага, которые будут переданы непосредственно в ВЫВОД, когда встречаются, так же существует 5 УКАЗАТЕЛЕЙ
В данном примере первый байт пакета данных передается в ВЫВОД, 2 байта читаются, чтобы указатель, следующего байта был передан (в конечном счете) для вывода и так далее.

Самый последний пакет в блоке, почти неизбежно, будет характеризоваться чрезмерностью двоичного р азряда. Данный блок игнорируется(сокращается), а окончательная длина на ВЫХОДЕ всегда известна из Входа. Вы не можете полагаться на игнорируемый бит в формате флаг (вплодь до семи из них) которые должны быть какого-либо конкретного значения (0 или 1).
Две колонки
О нас
SunHorizon Wiki версия 1.0.2.17.
© 2013-2014 SUNHORIZON.INFO.Все права сохранены.
В проекте использованы изображения FamFamFam
Связь с нами
Изображение
Правила сайта
Изображение

Авторские права
Изображение