Препроцессор для JASS, который по умолчанию встроен в Reforged и большинство сборок JNGP, основная идея которого заключается в расширении языка таким образом, что валидный JASS является валидным VJASS.
Установка
Для работы вам потребуется правильная версия JNGP. Просто распакуйте его не в папку с игрой. Идеальным вариантом будет D:/.
Пароль для распаковки
JNGP
AdicHelper
Из-за совместимости со старым говнокодом эта папка по умолчанию включена в сборку. Если не хотите дебажить код с помощью генератора случайных чисел, то обязательно удалите эту папку.
Настройка
- ✅ Enable JassHelper - включает дополнительный функционал работы с кодом.
- Debug Mode - режим отладки. Об этом ниже.
- Disable vJass syntax - отключает препроцессор VJASS.
- ✅ Disable script optimization - отключает оптимизацию кода. Оптимизатор написан ногами, так что лучше его отключить.
import
Пожалуй самая полезная директива. Позволяет использовать внешний код:
//! import "main.j"
На место этой строки будет помещено содержимое файла main.j находящегося в одной папке с картой. Один и тот же файл не может быть импортирован дважды.
Внешние редакторы
Встроенный в редактор TESH был хорош в момент своего выхода, но времена идут и код нынче модно редактировать в специально обученных для этого программах:
- Visual Studio Code:
- IntelliJ Idea и остальные IDE:
Наилучшим способом будет организовать структуру таким образом:
D:/MyMaps/MyAwesomeMap
└── map.w3x
├── main.j
└── src
├── lib
| ├── libA.j
| └── libB.j
└── spell
├── spellA.j
└── spellB.j
Нестандартный код карты
//! import "main.j"
main.j
//! import "spell/spellA.j"
//! import "spell/spellB.j"
spellA.j
//! import "../lib/libA.j"
spellB.j
//! import "../lib/libB.j"
Теперь при сохранении карты в редакторе код будет собран из указанных файлов, которые можно просто редактировать и хранить на гитхабе.
globals
Как следует из описания эти блоки должны находиться до объявления первой функции, что делает невозможным создание глобальных переменных не прибегая к редактору триггеров. Поэтому при компиляции VJASS переносит эти блоки в начало файла war3map.j:
function MyFunc takes nothing returns nothing
call BJDebugMsg(s)
endfunction
globals
string s = "Этот блок перенесён в начало файла"
endglobals
scope
Позволяют обернуть код в отдельный именованный блок. При компиляции никаких дополнительных действий с кодом внутри областей произведено не будет.
scope MyScope initializer Init
// Этот блок будет исполнен в штатном режиме
endscope
initializer
Указывает функцию, которая будет выполнена перед завершением функции main. Ради этого области и затевались.
scope MyScope initializer Init
private function Init takes nothing returns nothing
// Эта функция будет выполнена перед завершением функции main
endfunction
endscope
Функция инициализации не должна ничего принимать и ничего возвращать.
key
Новый тип, который является integer, но есть нюанс - при компиляции ему будет присвоено уникальное значение.
globals
key MyKey
endglobals
Позволяет гарантировано избежать коллизий при использовании хэштаблиц.
debug
Удобная опция в меню, которая позволяет исключать из компиляции отладочный код. Так же при компиляции будет добавлена глобальная переменная DEBUG_MODE типа boolean.
function MyFunc takes nothing returns nothing
debug call BJDebugMsg("Это сообщение будет показано только в режиме отладки!"))
if DEBUG_MODE then
debug call BJDebugMsg("Этот блок исполнится только в режиме отладки!"))
endif
endfunction
При отключённом режиме отладки этот код будет скомпилирован таким образом:
function MyFunc takes nothing returns nothing
if false then
debug call BJDebugMsg("Этот блок исполнится только в режиме отладки!"))
endif
endfunction
inject
Позволяет заменить функции main и config на собственные.
config
//! inject config
// Этот блок будет выполнен в лобби
//! endinject
main
//! inject config
// Этот код будет выполнен до выполнения initializer функций
//! dovjassinit
// Этот код будет выполнен после выполнения initializer функций
//! endinject
Ред. PT153
Режим отладки её автоматом включает, но режим отладки должен быть включён только во время разработки.
Ред. nazarpunk
Ред. nazarpunk
Ред. nazarpunk