Объявление глобальных переменных всегда было головной болью для разработчика. Их создание и удаление было доступно исключительно из специального диалогового меню редактора триггеров, что сильно усложняло процесс контроля переменных, а так же переноса из наработок или целых систем. Ситуацию так же усугубляло количество глобальных переменных - хранились они нераздельно, в одной большой куче - их поиск становился сущим кошмаром. А уж если вспомнить ненавистную всеми кодерами, отвратительную приставку udg_ ...
Все существующие в карте глобальные переменные должны быть объявлены в специальной секции globals...endglobals, скрытой от разработчика. Эта секция должна располагаться строго в начале кода карты (файла war3map.j архива карты). И именно эта особенность не позволяла гибко контролировать глобальные переменные из кода.
Парсер JassHelper разрешает все представленные выше проблемы и позволяет объявлять блоки глобальных переменных globals...endglobals в любом угодном вам месте, будь то CustomScript карты или секция триггера.
Пример объявления:
Пример объявления:
globals
constant integer SOMETHING_INDEX = 45
integer array SomeArray
string MyMessage = "Hello, World!"
endglobals
Парсер просто напросто объединит все найденные блоки объявления глобальных переменных и перенесет их на самый верх кода карты, туда, где объявление и должно распологаться.
Из примера представленного выше, вы так же можете узнать о возможности объявления массивов. Так же вам доступно объявление констант, путем использования ключевого слова constant перед именем типа переменной.
Из примера представленного выше, вы так же можете узнать о возможности объявления массивов. Так же вам доступно объявление констант, путем использования ключевого слова constant перед именем типа переменной.
Однако, вам следует учитывать пару важных моментов:
- Вы НЕ можете использовать функции или НЕконстантые значения в качестве значения по умолчанию для инициализации глобальных переменных. В представленном примере выше, литералы 45, и "Hello, World!" допустимы, но запись
globals
unit MyUnit = CreateUnit(...)
endglobals
работать не будет.
- Вы НЕ можете использовать одни глобальные переменные в качестве значения по умолчанию для инициализации других глобальных переменных. Это связано с тем, что будущий порядок глобальных переменных, после обработки всего карты парсером, невозможно проконтролировать или предугадать.