Важно
Прежде чем мы начнем изучение JASS, стоит кратко оговорить несколько вещей.
Для какой версии варкрафта актуален данный курс? Я играю на версии 1.26, соответственно, карты я делаю для этой версии. Полагаю, что для версии 1.28 также не будет проблем. А вот дальше начинаются оговорки и трудности.
Что такое JASS? Если очень кратко и просто, то JASS это такие текстовые команды для движка варкрафта 3. Как и триггеры, они позволяют управлять почти всеми игровыми процессами (созданием юнитов, способностями, эффектами...). В отличие от триггеров JASS имеет больше возможностей.
Зачем учить JASS? Как уже было написано выше, JASS имеет больше возможностей чем триггеры. Среди новых возможностей самой важной является устранение утечек. Если по-простому, то триггеры оставляют после себя мусор, который со временем тормозит игру или вызывает критические ошибки. Утечки нужно чистить, а сделать это можно только с помощью JASS. Но чистка мусора не единственное его преимущество. Поверьте, джасс способен на многое, но об этом позже. В целом, вам необязательно заменять триггеры джассом, его можно использовать вместе с триггерами.
Требования к читателю. Для того чтобы осилить данный курс, вам необходим опыт работы с триггерами. Вам нужно создать несколько карт с непростыми триггерами (инком, спавн мобов в ТД или арене, триггерная способность...). Доводить карту до ума не обязательно, главное написать рабочие триггеры. Также будет не лишним знать что такое глобальные переменные, как их создавать и использовать.
Что такое JASS и его диалекты?
JASS
Википедия
На википедии есть замечательная статья в которой много чего написано о JASS. Пересказывать всё я не буду, лучше зайдите и почитайте сами. Ничего сверх важного там нет, но думаю вам будет интересно посмотреть на преимущества JASS над триггерами.
Мы не будем разбирать каждое слово в определении джасса и что значит аббревиатура JASS, как это сделано в других уроках! Сэкономим два часа времени и ничего не потеряем. Если вам всё же интересно, идите на вики.
Определение
Для просты понимания, я убрал всё лишнее с определения.
JASS - это скриптовый язык программирования.
Что значит язык программирования? Ну, это и впрямь язык, как русский к примеру, а вернее английский. Мы буквально пишем "создай юнита пехотинца там-то", только на английском. Ну, может и не совсем на английском, но на очень похожем языке с примесями математики. Скриптовый же значит, что джасс руководит готовым функционалом, а не создает его с нуля. Также код написанный на скриптовом языке программирования называется скриптом. Собственно, это знание единственная причина по которой я и это не вырезал. Просто запомните, код и скрипты в нашем случае одно и тоже.
Пример кода
Взглянем на то, как выглядит джасс. Для этого я напишу одну строчку кода:
call CreateUnitAtLoc(Player(0), 'hfoo', Location(0,0), 270)
Данный код создает юнита пехотинца для игрока номер 0 (красный игрок) в точке x=0, y=0 смотрящего в сторону на 270 градусов. Если вы хоть немного знаете английский, то уже поняли это и без меня. Перевожу для остальных:
звонок СоздатьЮнитаВТочке(Игрок(0), 'hfoo', Точка(0,0), 270)
Перевод не совсем точный, но максимально понятный. Мы как будто позвонили какому-то чуваку, который записан у нас как "СоздайЮнитаВТочке" и лаконично такие: "игрок 0, пехотинец, координаты 0 0, поворот 270". А он даже ничего не ответил, но зато сделал.
Да да да... 'hfoo' не похоже на "пехотинец", зато похоже на "footman", но поговорим об этом, когда узнаем что такое ИД.
Куда писать код?
Всего в редакторе триггеров есть три варианта куда можно писать код на JASS. Сейчас я покажу вам самый простой из них, а с остальными познакомимся позже.
- Откройте редактор триггеров
- Выберите нужный триггер, или создайте новый.
- Добавьте ему действие "Custom Script".
- Впишите туда нужный код (например из примера выше).
Внутри триггеров на самом деле JASS
Для начала, я убежусь, что вы знаете термин GUI. В контексте триггеров варкарфта, GUI - это все те окошки, в которых вы выбираете события, действия и условия, а затем заполняете их. Иногда их зовут просто "гуи", как и JASS зовут просто "джасс".
Если вы прочли статью о JASS на википедии, то уже знаете, что триггеры на GUI, могут быть преобразованы в триггеры на JASS. Для этого в редакторе триггеров:
- Выберите нужный триггер
- На верхней панели нажмите Правка -> Конвертировать в текст
- Если выскочит окошко с предупреждением - жмем ок
На самом деле, данную операцию можно отменить, но одной с оговоркой. Как и любую операцию, преобразование триггера в текст можно отменить комбинацией клавиш Ctrl+z. Таким образом, можно преобразовать триггер в код, посмотреть на него и даже что-то скопировать (но не менять), а затем вернуть всё обратно.
После всего перечисленного, обычный триггер будет преобразован в код. Для сравнения, я приведу пример с википедии, где был взят стартовый триггер с инициализацией сражения. Он создается реактором карт при создании карты, а мы его обычно удаляем, чтобы не появлялось главное здание, рабочие и т.д.
Если вы используете обычный редактор карт, то текст у вас будет не такой красивый, как на картинке. Не беспокойтесь, скоро, мы перейдем на редактор карт JNGP. Он даст дам немного больше функционала и удобств, среди которых и красивый текст кода.
Таким образом, можно, посмотреть, как ваш триггер выглядит изнутри. Также это будет основным местом куда мы будем писать код. Но всему своё время.
Ошибки сценария (компиляции)
Как и в человеческом языке, в языке программирования есть свои правила написания. Вам нужно ставить знаки где нужно, у разных слов своё предназначение и место. В человеческом языке, если вы ошиблись, то вас с трудом, но поймут. Компьютер же туповат, отсутствие запятой или неправильный порядок слов для него серьёзная проблема. В любой непонятной ситуации он выдаст вам ошибку. Но в его оправдание, стоит сказать, что все знаки и слова в языке программирования несут больше смысловой нагрузки.
Как это происходит? Во время сохранения карты, редактор проверяет код на наличие ошибок. В случаи обнаружения любой ошибки, он покажет окошко с описанием проблемы и проблемным местом в коде. Также он отключит содержащий ошибку триггер. Карта будет сохранена и её можно будет запустить в игре, но триггер не будет работать. Вам нужно будет исправить все ошибки и включить все отключенные триггеры, а потом еще раз сохранить карту.
А теперь к практике:
- Создадим триггер, в котором добавим свой уже знакомый скрипт, но с опечаткой:
call CreateUnitAtLoc(Player(0), 'hfoo', Location(0,0), 270)
уберем букву "C" в слове "Create"
call reateUnitAtLoc(Player(0), 'hfoo', Location(0,0), 270)
- Сохраняем и получаем ошибку
Здесь мы можем видеть название триггера ("test"), возможную причину ошибки ("Отсутствует название функции") и строчку кода, в котором была обнаружена ошибка ("call reateUnitAtLoc...").
- Нажимаем ок и видим что триггер был отключен
- Исправляем ошибку и включаем триггер.
- Сохраняем карту, после чего всё будет работать
Сейчас это всё может быть не очень понятным, но я должен был показать вам, что такое ошибки до того, как вы узнаете правила написания кода. Потому, что уже в первом примере, вы могли столкнуться с ошибкой и не знать, что с ней делать. В дальнейшем, я буду периодически рассказывать вам об возможных ошибках и путях их решения.
В редакторе карт JNGP, всё немного по другому. Причины ошибок расписаны более точно и понятно. Как минимум, при опечатках там предлагаются возможные варианты написания. Триггеры с ошибками не отключаются. При этом, карта успешно сохраняется, но не запускается в игре до исправления всех ошибок, или отключения нерабочего триггера вручную.
Диалекты vJASS, cJASS, ZINC
Под диалектами языка JASS имеются в виду его модификации. Все они не могут ничего такого чего не может джасс, но зато добавляют множество удобств. Связано это с тем, что движок варкарфта 3 понимает только джасс. Поэтому, весь код на любом из диалектов, должен быть преобразован в чистый джасс. Совершают это преобразование специальные модификации для редактора карт. Делают они это автоматически, без участия пользователя, что очень удобно.
Для работы каждого из диалектов, нужно установить соответсвующую модификацию для редактора карт, или скачать уже готовую сборку. Для vJASS и ZINC это JassHelper, официальный сайт которого уже мертв. Но он входит во все сборки редактора карт JNGP, поэтому его не нужно устанавливать вручную. Для cJASS это Adic Jass Helper.
Разные сборки и их установка будет рассмотрена в соответствующем уроке.
vJASS, на мой взгляд, самый полезный из диалектов. Я не знаю как объяснить людям не знакомым с джасс то, что добавляет vJASS. Но поверьте, он настолько полезен, что мы будем учить его параллельно с джассом. Основным его достоинством является функционал для разделения кода на маленькие кусочки. Без него, большой код быстро превратиться в свалку, в которой сложно будет ориентироваться. А сложности нам не к чему. Также он серьёзно облегчит роботу с массивами, глобальными переменными и многим другим.
Вы можете посмотреть документацию по vJASS на русском или на английском. Читать документацию сложно, поэтому и необязательно. А иначе, для кого и зачем я пишу свой курс?
cJASS еще один достаточно полезный диалект, который позволяет вам сократить код и время на его написание. В основном, он позволяет писать короткие символы вместо длинных слов, а также добавляет макросы. Но опять же, поймете всё только после ознакомления с jass. сJASS можно использовать вместе с vJASS.
Документация по сJASS на русском и английском.
ZINC, на мой взгляд, излишне сложный и недружелюбный к новичкам диалект. Очень похож на "серьёзные" языки программирования такие как С. Он может быть полезен программистам, но новичкам в программировании он принесет только лишний геморрой.
Почитать о ZINC можно тут.
Как это всё работает?
Далее будет не совсем легкая для новичков информация. Её можно пропустить и вернутся позже, когда уже будут какие-то знания и возникнут вопросы о внутренней работе редактора карт.
Файлы
Если вы не знали, файл с картой варкрафта это MPQ архив. Этот архив нельзя открыть обычным архиватором, но существуют специальные аналоги, как например MPQ Editor. Внутри этого архива находятся файлы связанные с картой, например: импортированные файлы (модели, текстуры, иконки...), файл с декорациями, файл с нестандартными типами (юнитов, способностей, декораций...) и т.д.
Файлы скриптов JASS могут иметь расширения .j или .ai. Архив карты всегда содержит файл скрипта карты — war3map.j. Именно в этом файле хранятся все наши скрипты.
Данные о GUI-триггерах содержатся в файле war3map.wtg.
Компиляция
Во время сохранения карты, редактор проверяет код на наличие ошибок, а затем собирает все скрипты в основном файле скриптов (war3map.j). Тем временем, гуи-триггеры также превращаются в джасс и отправляются в тот же файл. Затем, когда мы уже запускаем карту в игре, происходит компиляция кода. Компиляцией называют преобразование кода на языке программирования в машинный код, который понимает компьютер, в случаи варкрафта это байт-код. И таким образом, во время игры, движок варкрафта выполняет все наши указания, которые были написаны в коде.
Данные о гуи-триггерах из файла war3map.wtg нужны только для редактора. Его можно удалить для оптимизации, что собственно и делают всякие оптимизаторы карт по типу Wc3 Map Optimizer. Но, так как, без него отредактировать стандартными средствами редактора код карты будет невозможно, то делать это нужно на копии карты.
Если же вы используете диалекты джасса, то во время компиляции, весь код на диалектах будет также преобразован в чистый джасс. Но в редакторе вам всегда будет показан, тот код, который вы написали. За исключением окна с сообщением об ошибке, там будет показан весь код, но уже на JASS. Всё происходит автоматически и не вызывает трудностей.
Ред. Берги
Ред. Берги
По второй ссылке вообще всё норм, первая да там ретурнг баг, что то мега древнее по ней я учился в 2007, просто открыл и просто делал (даже регаться не было нужды), мне было 17. Или вы хотите сделать курс для людей рождённых после 2010? тогда да не спорю, ваше дело благое но нужно поменять формат, сделать видосики в стиле аниме, тонны текста это для старпёров, щас как бы тикток в тренде. Даже ютубчик уж в прошлом
Ред. N7 Molot
Ред. GetLocalPlayer
Хз по псевдо-критике сверху, но для примера, мой перевод vJass мануала над которым прошлый админ раздела не дал продолжить работу и просто снял с публикации. Хотя, казалось бы, у вас по vJass на русском языке в такой детализации ВООБЩЕ ничего нет. Но нет, админка тут нужна чтобы тешить застоявшийся детский максимализм.
Ред. mistwood
Приведу тебе пример - я подрабатываю в КК клубе, в нем очень любят Варкравт. У меня на компах стоит по 2 версии варика (1.26 и Рефордж). Как ты думаешь в какую версию рубятся посетители? Соотношение даже не близко к 80-20%. И не в пользу рефорджа, который на новых/сильных компах по 2-3 минуты грузит карту и виснет. Зачем вы расхваливаете и пихаете в массы эту недоигру? Серьезно, зачем? Я читаю комменты одного админа, и просто в шоке... Человек сделал хорошую статью по джасу, залазит сюда этот шериф и пишет цитирую "но а по джасу их слишком много, джас ужасен стар и гремуч, нового вы о нем ничего не расскажите. Люди все по прежнему ждут мануала по джасу для VSCode и режим папки в 1.26. Делать стать по джасу - тоже самое, что делать товердефенс в варкрафте, а не кажется ли вам что этого г предостаточно?"
@ Пишешь статью по JASS.
@ Приходит администратор WC3 раздела.
@ Говорит что мой труд не нужон и от меня вообще гавной воняет.
@ Десятый год на XGM не появляются люди которые бы развивали ресурс.
@ Администрация теряется в догадках.
Ред. N7 Molot
Это деградация, как вы пишите про "варкравт не заканчивается на рефордже и луа", имеенно у вас варкрафт закончился ещё раньше, в 2003 на жасе. Скажу на вашем языке "варкарфт увы не заканчивается на джасе и на 1.26 патче"
Знаете такого товарища как богдан проггер? он же Ev3nt, знаете что он смог сделать? он смог внедрить луа в 1.26. Он сделал тоже самое что сделали китайцы и тоже самое что сделали близы, когда подтягивали луа для рефа. Только ему всего 15-16 лет.
Да ваш труд ничтожен.
Все постоянно развивают ресурс, только пользователи деградируют. Давайте посмотрим что люди делали в варике в 2009 на джасе
Покуда тут вы заливаете за джасс в 2003, сюда никто не придёт с модами из роблокса, пусть даже дегродно примитивными.
Адм состав пытался развивать киберпанк, старкрафт.. надо кому это? никому
Старкрафт 2 дата выхода - 2010 год, он во всё лучше варкарфта, как мили стратегия, и как платформа для модинга, нужен ли кому- не кому. Тут компы у всех с 2005. Всё должно двигаться, модели для вара можно давно уже делать в блендере конверить - вы всё моделите в мдлвисе. Есть луа есть патч 1.29 + есть мемхак для 1.26 вы модите в редакторе из коробки. И при этом считаете что ресурс не развивается.
Даже такое рес развивается. Но общество деградируют, покуда люди клепают тд в 2021, и клепают статьи на джас.
Я пытался сдержаться и быть добрым, но вы меня разозлили..