Добавлен , не публикуется

Руководство пользователя

Содержание:
Данный раздел руководства содержит ознакомительную информацию, за подробной спецификацией следует обратиться к соответствующему разделу.

Запуск

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

Несколько простых правил

Во избежание неприятностей, вызванных недоработанностью утилиты, следует придерживаться следующих правил:
  • помнить про регулярное резервное копирование карты (JNGP делает резервные копии, но не зазорно и вручную скопировать)
  • если происходит подстановка данных из одной карты в шаблон другой карты следует очистить папку Fly от файлов вида war3map.*
  • задавая вопрос о неправильной работе утилиты было бы неплохо прикрепить файл Fly.log, в котором содержится информация о всех действиях утилиты при последнем вызове - это может помочь в решении проблемы.
  • не включать автоматический импорт обработанного файла строк, иначе все шаблоны в текстовых описаниях будут потеряны при следующем открытии сохраненной в этом режиме карты (обработанные строки пока предполагается импортировать вручную на этапе подготовки карты к публикации, позже это будет исправлено)
  • минимизировать объем кода путем импорта особо крупных библиотек из внешних файлов (актуально для проектов с десятками тысяч строк кода), что ускорит обработку кода утилитой т.к. она вызывается раньше, чем будут вставлены импортируемые участки кода.

Ваш первый шаблон

Ну вот и пришло время написать первый шаблон, который будет обработан утилитой
DisplayTextToPlayer(Player(0),0,0,"2+2=${2+2}")
Размещение и вызов этого кода оставляю на вашей совести. Скажу только что этот шаблон будет скомпилирован при сохранении карты в
DisplayTextToPlayer(Player(0),0,0,"2+2=4")
На самом деле шаблоном тут является только фрагмент ${2+2}, который и будет обработан препроцессором.
Не то чтобы это очень впечатляло, конечно, но начинать нужно всегда с самых простых вещей.
И так, мы выяснили что блок ${ } обрабатывается препроцессором и арифметические операции внутри него выполняются на этапе сохранения карты, но исчерпываются ли на этом все его возможности? Конечно же нет!

Получаем данные

Теперь попробуем получить данные о каком-нибудь объекте из РО. Для этих целей я изменил параметры первого попавшегося под руку юнита. Попался, как обычно, рабочий людей с равкодом hpea. Для эксперимента мной было выбрано поле "физический размер", равкод которого ucol (равкоды полей можно посмотреть в РО, если JNGP настроен соответствующим образом)
DisplayTextToPlayer(Player(0),0,0,"Физический размер рабочего равен ${hpea.ucol}")
Запустив карту или посмотрев код карты после сохранения можно убедиться что вместо ${hpea.ucol} было подставлено конкретное значение.
Важно: внутри блока ${ } выполнятся все арифметические операции, но результатом обработки одного такого блока должно быть одно и только одно значение.
${hpea.ucol*2}, ${hpea.ucol+hpea.ucol}, ${hpea.ucol*3 + 15.0 + hpea.ucol/100} и любое другое арифметическое выражение будет обработано нормально, а вот ${hpea.ucol hpea.ucol} и даже ${2 2} обработаны не будут и вызовут ошибки, если шаблон был использован не внутри строки, а, например, для присвоения значения переменной.

Категории

Кому-то, возможно, хватило бы и доступа к данным по равкоду объекта, но зачастую равкод объекта становится известен уже на этапе выполнения, а значит нужно собирать базу данных. Так что же, собирать данные по объектам в базу, вручную перечисляя все равкоды объектов и полей? Это не многим лучше чем вручную вносить в базу все данные.
Эта проблема решается с помощью перечислений по категориям.
<list units as u>
    SaveReal(Hashtable,${u},0,${u.ucol}) //физический размер
    SaveInteger(Hashtable,${u},1,${u.ugol}) //требуется золота
</list>
Сгенерирует код, заполняющий хештаблицу Hashtable данными по физическому размеру и стоимости юнитов. Ввиду ограниченности возможностей утилиты, корректно будут записаны только значения, отличающиеся от стандартных.
В качестве категории в данном случае выступает units.
По умолчанию категоризация проходит в соответствии с типом объекта, но также можно указать собственные категории прямо в РО.
Записав в поле "суффикс редактора" строку вида: "текст @[категория1][категория2][категория3]" можно вручную задать дополнительную категоризацию каждого объекта. В названиях категорий допускаются только латинские символы и цифры, кириллица не поддерживается.

`
ОЖИДАНИЕ РЕКЛАМЫ...