Формат XML

Материал из xrWiki
Перейти к: навигация, поиск

Файлы XML можно всего редактировать в обычном текстовом редакторе, типа блокнота, но гораздо лучше это делать в редакторе с подсветкой синтаксиса и табуляции (типа SciTE или Notepad++).

Теги в XML бывают двух типов: парные и одиночные. Парные теги обязательно должны закрываться соответсвующим тегом. Например:

<bio>Детальная информация отсутствует.</bio>

Одиночные теги не закрываются. Например:

<?xml version='1.0' encoding="windows-1251"?>

Всё, что относится к парному тегу, находится внутри него, между открывающим и закрывающим тегом. При получении определенного инфопоршна запустить квест с id = bar_bar_hunter_quest_start

	<info_portion id="bar_bar_hunter_quest_start">
		<task>bar_hunter_rifle</task>
		<action>level_tasks.notify_new_task</action>
	</info_portion>

Для комментариев используется особый тэг:

<!--             тут текст комментария              -->

Следует также понимать, что если вы внутри тэга используете знак -- , то xml ожидает, что это закрывающий тег, и, не найдя знака > , будет жутко ругаться. Поэтому если вы хотите сделать что-то вроде:

<!--   ------------ тут текст комментария   -------------------   -->

То у вас ничего не получится. Следует делать так:

<!--   **************** тут текст комментария  ********************  -->

И последнее. Если после окончания редактирования xml вы не уверены, что не допустили ошибки в структуре и что код прочитается движком нормально, то корректность синтаксиса можно проверить, открыв файл через браузер. Если он не сможет открыть xml, то и движок не сможет. К тому же он укажет сам, в какой строке и на какой позиции была допущена ошибка.

P.S. В \gamedata\config\system.ltx перечисляются все xml, которые загружает движок.


Система string_table[править]

Следует избегать указания текста в игре напрямую. Для этого создана хитроумная система string_table.

Логика работы предельно проста. Каждый текст, перед выводом на экран прогоняется через особую таблицу. В таблице указаны соответствия входящий_текст – исходящие_тексты. То есть для каждого входящего текста может быть несколько исходящих. По идее по одному исходящему тексту для каждого языка локализации. Если для текущего входящего текста соответствия не найдено, то на экран выводится он сам. Таким образом, если вы в диалоге напишете фразу русским языком, то она так и будет выводиться русским языком даже в английской версии игры.

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

Все стрингтейблы задаются в папке GameData\Config\Text\. По этому пути созданы несколько папочек, по одной на каждый язык. Внутри каждой папочки абсолютно идентичный набор файлов (в идеале).

В каждом файле стрингтейбла описываются фразы. Например:

    <string id="escape_factory_assault_hello_2">
        <text>Ты, наверное, тот малый, о котором Волк говорил? Вообщем смотри, бандитов в принципе немного. Вот только мы своей толпой тудя вряд ли тихо проберёмся. На втором этаже снайпер сидит, все подходы пасёт. Если бы не он - мы бы их как следует наказали.</text>
    </string>

Таким образом, уникальному идентификатору escape_factory_assault_hello_2 ставится в соответствие текст фразы. А там, где нам нужно ставить данную фразы — мы указываем её идентификатор.

Аналогичная запись в англоязычном файле:

    <string id="escape_factory_assault_hello_2">
        <text>You are supposed to be that guy Wolf has been talking about? Well it’s up to you now, basically there are not so many bandits there. Although we can hardly penetrate it together. Sniper has settled on the first floor staring at all passing nearby. If it were not for him – we would punish them swiftly.</text>
    </string>

В диалоге же соответствующая запись задается так:

            <phrase id="2">
                <text>escape_factory_assault_hello_2</text>
            </phrase>

По поводу описания диалогов более подробно смотрите соответствующую статью.

Файлы со стрингтейблами диалогов называются следующим образом: GameData\Config\Text\rus\stable_dialogs_название_уровня.xml (или \eng\ для английской версии).

Файлы со стрингтейблами тасков (заданий и подзаданий квестов) именуются следующим образом:
GameData\Config\Text\rus\string_table_tasks_название_уровня.xml

Файлы со стрингтейблами иноформации в энциклопедии именуются следующим образом:
GameData\Config\Text\rus\string_table_enc_название_уровня.xml



Скопировано из доков GSC за 2005г.