Добавлен , опубликован
Раздел:
Триггеры и объекты
Содержание:

Важно

Прежде чем мы начнем изучение 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. Всё происходит автоматически и не вызывает трудностей.

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
30
3 года назад
2
Не заявляйте на публикацию неготовые ресурсы, пожалуйста.
0
1
3 года назад
0
зачем нужен jass не понимаю есть lua и warcraft 3 reforget.
2
11
3 года назад
2
Survivalist:
зачем нужен jass не понимаю есть lua и warcraft 3 reforget.
Много людей играют и делают карты на старых версиях по разным причинам. Если есть спрос, то должно быть и предложение.
2
32
3 года назад
Отредактирован Берги
2
Много людей играют и делают карты на старых версиях по разным причинам. Если есть спрос, то должно быть и предложение
Нет это не спрос, это неизбежность, статей по другим языкам нет, но а по джасу их слишком много, джас ужасен стар и гремуч, нового вы о нем ничего не расскажите. Люди все по прежнему ждут мануала по джасу для VSCode и режим папки в 1.26. Делать стать по джасу - тоже самое, что делать товердефенс в варкрафте, а не кажется ли вам что этого г предостаточно?
0
11
3 года назад
0
Bergi_Bear:
Много людей играют и делают карты на старых версиях по разным причинам. Если есть спрос, то должно быть и предложение
Нет это не спрос, это неизбежность, статей по другим языкам нет, но а по джасу их слишком много, джас ужасен стар и гремуч, нового вы о нем ничего не расскажите. Люди все по прежнему ждут мануала по джасу для VSCode и режим папки в 1.26. Делать стать по джасу - тоже самое, что делать товердефенс в варкрафте, а не кажется ли вам что этого г предостаточно?
Я не поленился и вбил в поисковую строку xgmа слово "jass". Пролистав 36 страниц, я нашел четыре обучающие статьи о джассе, в которых сохранилось содержимое. Я даже дам ссылки на них: 1, 2, 3, 4.
А теперь прочитайте их и ответьте мне на вопрос, действительно ли они предоставляют полную информацию о JASS? Прочитайте комментарии, понятны ли они всем новичкам?
Да, еще есть статьи про vJASS, сJASS, и ZINC. Но они по сути перевод документации, а она не совсем подходит новичкам.
Опять же, существующие предложение не способно удовлетворить спрос. А если я чего-то не знаю, то откройте мне и многим новичкам тайну, где хранятся все эти заветные статьи по джассу? Но вообще, реально, без шуток, если они есть, то покажите их.
2
32
3 года назад
Отредактирован Берги
2
Это оно и есть поэтому учились 15 летние школьники.
По второй ссылке вообще всё норм, первая да там ретурнг баг, что то мега древнее по ней я учился в 2007, просто открыл и просто делал (даже регаться не было нужды), мне было 17. Или вы хотите сделать курс для людей рождённых после 2010? тогда да не спорю, ваше дело благое но нужно поменять формат, сделать видосики в стиле аниме, тонны текста это для старпёров, щас как бы тикток в тренде. Даже ютубчик уж в прошлом
Вы делайте, я ж не запрещаю, что надо опубликую, ошибки подправлю, лайки поставлю

И сам формат статей это плохо, щас если хорошо то гуглят, находят похожий вопрос, и ответы к нему, сайт уже просто пестрит от повторов типа "как сделать лимит пищи больше 100", как "сделать чтобы юниты шли по лабиринту как в ТД". Загуглить любой вопрос в 100 раз проще, чем читать огромную статью. Отдельно и так разобран каждый пункт, о формате карты, о том какие редакторы есть, и ладно бы современно что-то нет, всякие древние jngp пусть и даже последняя модификация от PT (Прометея) есть, уже хорошо
2
48
3 года назад
Отредактирован N7 Molot
2
Звери! Ни какого уважения к труду человеческому!
3
17
3 года назад
Отредактирован GetLocalPlayer
3
Жизнь XGM
@ Решил включиться в работу на XGM.
@ С чего-то нужно начать.
@ Знаешь кодинг WC3.
@ Да, статей на эту тему уже много самых разных, но в работу нужно как-то включиться.
@ Где-то должна быть точка входа.
@ Решился, сейчас сделаю это, а там разберусь.
@ Сообщество подскажет, что в данный момент времени актуально.
@ Пишешь статью по JASS.
@ Приходит администратор WC3 раздела.
@ Говорит что мой труд не нужон и от меня вообще гавной воняет.
@ Десятый год на XGM не появляются люди которые бы развивали ресурс.
@ Администрация теряется в догадках.
Статья хорошая, автор. И чем больше, тем лучше, ибо люди по разному понимают изложение одной мысли от разных авторов. Например, для одних статься Сергеря о JASS оказалась ключем к пониманию основ, а для других была совершенна непрозрачна. Не потому что статься плохая или они тупые, просто мозги работают у всех по разному.
Хз по псевдо-критике сверху, но для примера, мой перевод vJass мануала над которым прошлый админ раздела не дал продолжить работу и просто снял с публикации. Хотя, казалось бы, у вас по vJass на русском языке в такой детализации ВООБЩЕ ничего нет. Но нет, админка тут нужна чтобы тешить застоявшийся детский максимализм.
2
6
3 года назад
Отредактирован mistwood
2
админка тут нужна чтобы тешить застоявшийся детский максимализм.
Ахахахх))) Как же ты прав. А еще забавно видеть как здесь пихают и пытаются возвысить ЛУА)))) До одного админа, просто не доходит, то что не всем он нужен, не все играют в сраный рефордж. Даже когда ему человек факты приводит, все равно он обосравшийся продолжает плеваться слюнями и писать про свое МЕГА-ПУПЕР-ЗАЛУПЕР крутое ЛУА. Нет уважения, понимания, что варкравт не заканчивается на рефордже и луа.
Приведу тебе пример - я подрабатываю в КК клубе, в нем очень любят Варкравт. У меня на компах стоит по 2 версии варика (1.26 и Рефордж). Как ты думаешь в какую версию рубятся посетители? Соотношение даже не близко к 80-20%. И не в пользу рефорджа, который на новых/сильных компах по 2-3 минуты грузит карту и виснет. Зачем вы расхваливаете и пихаете в массы эту недоигру? Серьезно, зачем? Я читаю комменты одного админа, и просто в шоке... Человек сделал хорошую статью по джасу, залазит сюда этот шериф и пишет цитирую "но а по джасу их слишком много, джас ужасен стар и гремуч, нового вы о нем ничего не расскажите. Люди все по прежнему ждут мануала по джасу для VSCode и режим папки в 1.26. Делать стать по джасу - тоже самое, что делать товердефенс в варкрафте, а не кажется ли вам что этого г предостаточно?"
Это нормально?)))) Если так, тогда сударь прав, и вы не уйдете вот от этого:
@ Пишешь статью по JASS.
@ Приходит администратор WC3 раздела.
@ Говорит что мой труд не нужон и от меня вообще гавной воняет.
@ Десятый год на XGM не появляются люди которые бы развивали ресурс.
@ Администрация теряется в догадках.
0
17
3 года назад
0
jass_dev, благодарю за статьи
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.