Table of Contents
<var ... ((Abcde)) ... /var>
— игровая «переменная» #
Технически это не совсем переменная, так как эта конструкция позволяет не только подставлять различные значения, но и менять оформление. Их трогать нельзя, так как они способны сломать игру и зачастую являются причиной вылетов. Но при этом можно трогать значения внутри скобок — (( ))
. То есть в примере выше мы можем спокойно поменять Abcde
. Длиной мы условно не ограничены — лишь в игре строка физически вмещалась в отведённое ей место.
Если интересуют технические детали работы переменных, а также некоторые типы и шаблоны, которые мне удалось вывести, то их можно найти здесь. Позже добавлю сведения оттуда сюда в более организованном и, надеюсь, понятном виде.
Максимально возможная длина переменной в байтовом предоставлении составляет 65 536 байт. Даже если набить переменную кириллицей, каждая буква которой состоит из двух байтов, места хватит на более 30 000 символов, в связи с чем ограничений на размер строк есть только физические. В свою очередь также длина строки в целом 32-битным числом, потому можно считать, что там нет ограничений.
В теории можно было бы, конечно, назначить для каждого типа переменной свой синтаксис, чтобы это выглядело более красиво и понятно. Более того, так примерно и сделали ребята в
ffxiv-datamining
. Но у нас такая идея упирается в то, что в проекте больше 5000 файлов, и при каждом открытии нового типа и сочинении синтаксиса для него нужно заново конвертировать весь проект. После этого сервер будет заново обновлять исходные файлы, в результате чего во всех предыдущих переводах, где изменился синтаксис переменной, понадобится исправлять перевод на новый формат. Вдобавок из меня такой себе программист, потому исполнение получилось бы слишком костыльным и с косяками.
<br>
— игровая переменная, выполняющая роль переноса на следующую строку #
Тут всё вполне просто. Нюанс есть в том, что не везде этот перенос будет работать. Определить, работает или нет, можно только попробовав. Игра не сломается от того, вставлен перенос строки туда, где он не работает.
Также может использоваться другая вариация переноса — <nl>
. В отличие от <br>
это заменяется не на игровую переменную, а на чистый символ переноса строки. Это вынесено в отдельную переменную в связи с ограничениями формата CSV и с существованием нескольких символов переноса строки, а игре нужен из них только один определённый. Замечено использование <nl>
пока что только в addon
.
<tab>
— разделитель колонок внутри одного файла #
Многие игровые файлы делятся на несколько колонок. В списках компонентов для каждого файла указано, за что отвечает каждая колонка, если это достоверно известно либо чётко обозначено.
Критически важно, чтобы количество <tab>
в исходной строке совпадало в переводе.
В будущем попробую написать для сервера проверку, которая будет ругаться, если количество
<tab>
не совпадает.