Курс JASS + vJASS

» Раздел: Триггеры и объекты
Содержание:

Важно

Прежде чем мы начнем изучение 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. Сейчас я покажу вам самый простой из них, а с остальными познакомимся позже.
  1. Откройте редактор триггеров
  2. Выберите нужный триггер, или создайте новый.
  3. Добавьте ему действие "Custom Script".
  4. Впишите туда нужный код (например из примера выше).

Внутри триггеров на самом деле JASS

Для начала, я убежусь, что вы знаете термин GUI. В контексте триггеров варкарфта, GUI - это все те окошки, в которых вы выбираете события, действия и условия, а затем заполняете их. Иногда их зовут просто "гуи", как и JASS зовут просто "джасс".
Если вы прочли статью о JASS на википедии, то уже знаете, что триггеры на GUI, могут быть преобразованы в триггеры на JASS. Для этого в редакторе триггеров:
  1. Выберите нужный триггер
  2. На верхней панели нажмите Правка -> Конвертировать в текст
  1. Если выскочит окошко с предупреждением - жмем ок
На самом деле, данную операцию можно отменить, но одной с оговоркой. Как и любую операцию, преобразование триггера в текст можно отменить комбинацией клавиш Ctrl+z. Таким образом, можно преобразовать триггер в код, посмотреть на него и даже что-то скопировать (но не менять), а затем вернуть всё обратно.
После всего перечисленного, обычный триггер будет преобразован в код. Для сравнения, я приведу пример с википедии, где был взят стартовый триггер с инициализацией сражения. Он создается реактором карт при создании карты, а мы его обычно удаляем, чтобы не появлялось главное здание, рабочие и т.д.
Если вы используете обычный редактор карт, то текст у вас будет не такой красивый, как на картинке. Не беспокойтесь, скоро, мы перейдем на редактор карт JNGP. Он даст дам немного больше функционала и удобств, среди которых и красивый текст кода.
Таким образом, можно, посмотреть, как ваш триггер выглядит изнутри. Также это будет основным местом куда мы будем писать код. Но всему своё время.

Ошибки сценария (компиляции)

Как и в человеческом языке, в языке программирования есть свои правила написания. Вам нужно ставить знаки где нужно, у разных слов своё предназначение и место. В человеческом языке, если вы ошиблись, то вас с трудом, но поймут. Компьютер же туповат, отсутствие запятой или неправильный порядок слов для него серьёзная проблема. В любой непонятной ситуации он выдаст вам ошибку. Но в его оправдание, стоит сказать, что все знаки и слова в языке программирования несут больше смысловой нагрузки.
Как это происходит? Во время сохранения карты, редактор проверяет код на наличие ошибок. В случаи обнаружения любой ошибки, он покажет окошко с описанием проблемы и проблемным местом в коде. Также он отключит содержащий ошибку триггер. Карта будет сохранена и её можно будет запустить в игре, но триггер не будет работать. Вам нужно будет исправить все ошибки и включить все отключенные триггеры, а потом еще раз сохранить карту.
А теперь к практике:
  1. Создадим триггер, в котором добавим свой уже знакомый скрипт, но с опечаткой:
в коде
call CreateUnitAtLoc(Player(0), 'hfoo', Location(0,0), 270)
уберем букву "C" в слове "Create"
call reateUnitAtLoc(Player(0), 'hfoo', Location(0,0), 270)
  1. Сохраняем и получаем ошибку
Здесь мы можем видеть название триггера ("test"), возможную причину ошибки ("Отсутствует название функции") и строчку кода, в котором была обнаружена ошибка ("call reateUnitAtLoc...").
  1. Нажимаем ок и видим что триггер был отключен
  1. Исправляем ошибку и включаем триггер.
  1. Сохраняем карту, после чего всё будет работать
Сейчас это всё может быть не очень понятным, но я должен был показать вам, что такое ошибки до того, как вы узнаете правила написания кода. Потому, что уже в первом примере, вы могли столкнуться с ошибкой и не знать, что с ней делать. В дальнейшем, я буду периодически рассказывать вам об возможных ошибках и путях их решения.
В редакторе карт 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. Всё происходит автоматически и не вызывает трудностей.


Views: 398

GetLocalPlayer #8 - 3 months ago (изм. ) 0
Голосов: +2 / -2
» Жизнь XGM
@ Решил включиться в работу на XGM.
@ С чего-то нужно начать.
@ Знаешь кодинг WC3.
@ Да, статей на эту тему уже много самых разных, но в работу нужно как-то включиться.
@ Где-то должна быть точка входа.
@ Решился, сейчас сделаю это, а там разберусь.
@ Сообщество подскажет, что в данный момент времени актуально.
@ Пишешь статью по JASS.
@ Приходит администратор WC3 раздела.
@ Говорит что мой труд не нужон и от меня вообще гавной воняет.
@ Десятый год на XGM не появляются люди которые бы развивали ресурс.
@ Администрация теряется в догадках.
Статья хорошая, автор. И чем больше, тем лучше, ибо люди по разному понимают изложение одной мысли от разных авторов. Например, для одних статься Сергеря о JASS оказалась ключем к пониманию основ, а для других была совершенна непрозрачна. Не потому что статься плохая или они тупые, просто мозги работают у всех по разному.
Хз по псевдо-критике сверху, но для примера, мой перевод vJass мануала над которым прошлый админ раздела не дал продолжить работу и просто снял с публикации. Хотя, казалось бы, у вас по vJass на русском языке в такой детализации ВООБЩЕ ничего нет. Но нет, админка тут нужна чтобы тешить застоявшийся детский максимализм.
mistwood #9 - 3 months ago (изм. ) -2
Голосов: +1 / -3
админка тут нужна чтобы тешить застоявшийся детский максимализм.
Ахахахх))) Как же ты прав. А еще забавно видеть как здесь пихают и пытаются возвысить ЛУА)))) До одного админа, просто не доходит, то что не всем он нужен, не все играют в сраный рефордж. Даже когда ему человек факты приводит, все равно он обосравшийся продолжает плеваться слюнями и писать про свое МЕГА-ПУПЕР-ЗАЛУПЕР крутое ЛУА. Нет уважения, понимания, что варкравт не заканчивается на рефордже и луа.
Приведу тебе пример - я подрабатываю в КК клубе, в нем очень любят Варкравт. У меня на компах стоит по 2 версии варика (1.26 и Рефордж). Как ты думаешь в какую версию рубятся посетители? Соотношение даже не близко к 80-20%. И не в пользу рефорджа, который на новых/сильных компах по 2-3 минуты грузит карту и виснет. Зачем вы расхваливаете и пихаете в массы эту недоигру? Серьезно, зачем? Я читаю комменты одного админа, и просто в шоке... Человек сделал хорошую статью по джасу, залазит сюда этот шериф и пишет цитирую "но а по джасу их слишком много, джас ужасен стар и гремуч, нового вы о нем ничего не расскажите. Люди все по прежнему ждут мануала по джасу для VSCode и режим папки в 1.26. Делать стать по джасу - тоже самое, что делать товердефенс в варкрафте, а не кажется ли вам что этого г предостаточно?"
Это нормально?)))) Если так, тогда сударь прав, и вы не уйдете вот от этого:
@ Пишешь статью по JASS.
@ Приходит администратор WC3 раздела.
@ Говорит что мой труд не нужон и от меня вообще гавной воняет.
@ Десятый год на XGM не появляются люди которые бы развивали ресурс.
@ Администрация теряется в догадках.
Vlod #10 - 3 months ago 2
Голосов: +2 / -0
jass_dev, благодарю за статьи
Bergi_Bear #11 - 3 months ago (изм. ) 1
Голосов: +3 / -2
Джасс это не развитие, и даже не топтание на месте, это шаг назад.
Это деградация, как вы пишите про "варкравт не заканчивается на рефордже и луа", имеенно у вас варкрафт закончился ещё раньше, в 2003 на жасе. Скажу на вашем языке "варкарфт увы не заканчивается на джасе и на 1.26 патче"
Знаете такого товарища как богдан проггер? он же Ev3nt, знаете что он смог сделать? он смог внедрить луа в 1.26. Он сделал тоже самое что сделали китайцы и тоже самое что сделали близы, когда подтягивали луа для рефа. Только ему всего 15-16 лет.
Да ваш труд ничтожен.
Все постоянно развивают ресурс, только пользователи деградируют. Давайте посмотрим что люди делали в варике в 2009 на джасе
И что эти люди продолжают делать в 2020
Хотите сказать они не развивают ресурс? а ваш мир остановился на 1.26, развитие остановилось, всё остановилось...
Покуда тут вы заливаете за джасс в 2003, сюда никто не придёт с модами из роблокса, пусть даже дегродно примитивными.
Адм состав пытался развивать киберпанк, старкрафт.. надо кому это? никому
Старкрафт 2 дата выхода - 2010 год, он во всё лучше варкарфта, как мили стратегия, и как платформа для модинга, нужен ли кому- не кому. Тут компы у всех с 2005. Всё должно двигаться, модели для вара можно давно уже делать в блендере конверить - вы всё моделите в мдлвисе. Есть луа есть патч 1.29 + есть мемхак для 1.26 вы модите в редакторе из коробки. И при этом считаете что ресурс не развивается.
Даже такое рес развивается. Но общество деградируют, покуда люди клепают тд в 2021, и клепают статьи на джас.
Я пытался сдержаться и быть добрым, но вы меня разозлили..
N7 Molot #13 - 3 months ago (изм. ) 0
Голосов: +0 / -0
Bergi_Bear:
это выбор каждого, развиваться или деградировать. ТД клепают и пишут на джазе, и будут это делать, до тех пока другое поколение не сменит их. Это так же, как и разработка игр в РФ, все делают мобильные казуалки, и будут делать - пока они приносят доход.
Ты ни чего не изменишь в этом мире - ты никто, и звать тебя никак. И хоть злись, хоть нет - это ни чего не изменит. Ты для себя решаешь сам - развиваться или нет.
Bergi_Bear #14 - 3 months ago 0
Голосов: +0 / -0
Ты прав, я никто и ничего не изменю, но попытаться надо, делать казуалки ещё сложнее чем игру с мудрёными механиками. Казуалка это когда у тебя есть вспомогательные интерфейсы, позволяющие адаптироваться специальный юи или удобное управление. А мультиборд с 20 статами в тавердефенсе, или сборка предметов "как в доте", это совершенно не казуально. Нагромождаются ненужные механики и тонна костылей. И это только то что видит игрок. На этапе разработки всё также "не казуально". Казуально это писать на луа в вскоде, а хардкорно громоздко использовать хештаблицы в дефолтном we
N7 Molot #15 - 3 months ago (изм. ) 2
Голосов: +2 / -0
Bergi_Bear:
со временем они сами поймут, что нужно было слушать Bergi, что лучше сразу бежать и делать игры или клепать кастомки на более современных играх/движках и так далее.
Кто-то это понимает сразу, кто-то это не слышит этого от тех, кто уже прошел этот путь. И знаешь, пускай - меньше конкуренции) Хоть это тоже и хорошо и плохо.
Vlod #16 - 3 months ago 3
Голосов: +3 / -0
Стоит вспомнить, что изначально у создателей карты DotA не было цели сделать отдельную игру, как и не было таких целей у других картоделов. Поэтому может не стоит сравнивать варкрафт модмейкинг со своими нынешними материальными амбициозными целями. Если бы тут кто-то считал, что игра в unity or unreal разрабатывается так же просто, как карта в варкрафт, то почему на сайте отсутствуют статьи, подобно этой
N7 Molot #17 - 3 months ago 0
Голосов: +0 / -0
Vlod:
это не одно и тоже, тут уже все зависит от подхода к разработке. А статьи отсутствуют из за того, что их удалили.
jass_dev #18 - 3 months ago 5
Голосов: +5 / -0
К сожалению, xgm очень часто напоминает мне старый анекдот:
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Всё конечно утрировано, но суть примерно та же. Во всяком случае, лично у меня такой именно опыт и речь сейчас не об этом курсе. Когда-то давно я пытался учить джасс на xgm, но мой интеллектуальный уровень был ниже, и статей было мало. В общем не получилось, а потом я подучил английский. Сперва я гуглял вопросы на русском языке и попадал на хгм, альтернатив так-то особо нет. Лишь когда ответов не было, я уходил на хайв. Скажу вам так, между русскоговорящей и англоговорящей аудиторией колоссальная разница. И дело не в размерах сообществ, хоть это и играет определенную роль, а в подходе к новикам. В русскоязычных сообществах новичка будут отговаривать от его затеи, говорить что слишком сложно, так сделать нельзя и т.д. В англоязычном сообществе, мало того, что всегда есть ответ или альтернатива, так еще есть и ответы на вопросы, но которые не смогли ответить в русскоязычном комьюнити.
Такой же опыт был у меня и с игровым конструктором game maker. Так что дело именно в русскоязычной культуре в целом, а не конкретном ресурсе.
Также практически весь материал, который большей частью еще находиться у меня в голове, взят с англоязычных источников или их переводов. А это про что-то да и говорит. Не ну я бы и рад их прочитать на русском, но их почти нет. С последнего я нашел только парочку обсуждений об агентах и утечках, что было полезно, но это была не статья.
А теперь два момента.
  1. К чему я это всё. Для того чтобы популяризировать "Развитие", думаю, нужно доказать то, что оно того стоит. Просто я не особо понимаю, а чего вы хотите? Не все способны и хотят делать крутые проекты, некоторые просто фанятся. Мы же вам не мешаем, да и вроде я не Моргенштерн, который портит молодые умы. Напишите статьи о ЛУА, я тоже посмотрю, может мне понравится. Я если честно не вникал в него, вообще не вкурсе фича ли это рефорджа, или его можно и в старых версиях беспроблемно использовать (это действительно важно). А то мы как в советском союзе, всё о светлом будущем, а в магазине у нас туалетной бумаги не найти.
Откуда же взяться приверженцам ваших идей, если они нигде не были изложены в достаточном объеме? Вот все якобы и деградируют.
  1. У меня лишних денег на рефордж нет, желания его покупать тоже нет, надеюсь по понятным причинам. У моих читателей ситуация аналогичная, осуждать их за это не стоит. Вообще-то варкрафту уже давно пора на помойку истории с такими рассуждениями, но только ситхи возводят всё в абсолют. Он Heroes 3 и Age of empire снова популярны в 2021 то году и ничего страшного. Там даже кастомки есть, а они еще страшнее чем в варкрафте.
Я понимаю, что меня и мою статью вроде уже оставили в покое, да особо и не задевали. Но сложно сдержатся и не вмешаться, когда у тебя за окном разгорается холивар. =)