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

Важно

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
3
32
3 года назад
Отредактирован N7 Molot
3
Джасс это не развитие, и даже не топтание на месте, это шаг назад.
Это деградация, как вы пишите про "варкравт не заканчивается на рефордже и луа", имеенно у вас варкрафт закончился ещё раньше, в 2003 на жасе. Скажу на вашем языке "варкарфт увы не заканчивается на джасе и на 1.26 патче"
Знаете такого товарища как богдан проггер? он же Ev3nt, знаете что он смог сделать? он смог внедрить луа в 1.26. Он сделал тоже самое что сделали китайцы и тоже самое что сделали близы, когда подтягивали луа для рефа. Только ему всего 15-16 лет.
Да ваш труд ничтожен.
Все постоянно развивают ресурс, только пользователи деградируют. Давайте посмотрим что люди делали в варике в 2009 на джасе
И что эти люди продолжают делать в 2020
Хотите сказать они не развивают ресурс? а ваш мир остановился на 1.26, развитие остановилось, всё остановилось...
Покуда тут вы заливаете за джасс в 2003, сюда никто не придёт с модами из роблокса, пусть даже дегродно примитивными.
Адм состав пытался развивать киберпанк, старкрафт.. надо кому это? никому
Старкрафт 2 дата выхода - 2010 год, он во всё лучше варкарфта, как мили стратегия, и как платформа для модинга, нужен ли кому- не кому. Тут компы у всех с 2005. Всё должно двигаться, модели для вара можно давно уже делать в блендере конверить - вы всё моделите в мдлвисе. Есть луа есть патч 1.29 + есть мемхак для 1.26 вы модите в редакторе из коробки. И при этом считаете что ресурс не развивается.
Даже такое рес развивается. Но общество деградируют, покуда люди клепают тд в 2021, и клепают статьи на джас.
Я пытался сдержаться и быть добрым, но вы меня разозлили..
0
48
3 года назад
Отредактирован N7 Molot
0
Bergi_Bear:
это выбор каждого, развиваться или деградировать. ТД клепают и пишут на джазе, и будут это делать, до тех пока другое поколение не сменит их. Это так же, как и разработка игр в РФ, все делают мобильные казуалки, и будут делать - пока они приносят доход.
Ты ни чего не изменишь в этом мире - ты никто, и звать тебя никак. И хоть злись, хоть нет - это ни чего не изменит. Ты для себя решаешь сам - развиваться или нет.
0
32
3 года назад
0
Ты прав, я никто и ничего не изменю, но попытаться надо, делать казуалки ещё сложнее чем игру с мудрёными механиками. Казуалка это когда у тебя есть вспомогательные интерфейсы, позволяющие адаптироваться специальный юи или удобное управление. А мультиборд с 20 статами в тавердефенсе, или сборка предметов "как в доте", это совершенно не казуально. Нагромождаются ненужные механики и тонна костылей. И это только то что видит игрок. На этапе разработки всё также "не казуально". Казуально это писать на луа в вскоде, а хардкорно громоздко использовать хештаблицы в дефолтном we
2
48
3 года назад
Отредактирован N7 Molot
2
Bergi_Bear:
со временем они сами поймут, что нужно было слушать Bergi, что лучше сразу бежать и делать игры или клепать кастомки на более современных играх/движках и так далее.
Кто-то это понимает сразу, кто-то это не слышит этого от тех, кто уже прошел этот путь. И знаешь, пускай - меньше конкуренции) Хоть это тоже и хорошо и плохо.
1
17
3 года назад
1
Стоит вспомнить, что изначально у создателей карты DotA не было цели сделать отдельную игру, как и не было таких целей у других картоделов. Поэтому может не стоит сравнивать варкрафт модмейкинг со своими нынешними материальными амбициозными целями. Если бы тут кто-то считал, что игра в unity or unreal разрабатывается так же просто, как карта в варкрафт, то почему на сайте отсутствуют статьи, подобно этой
0
48
3 года назад
0
Vlod:
это не одно и тоже, тут уже все зависит от подхода к разработке. А статьи отсутствуют из за того, что их удалили.
6
11
3 года назад
6
К сожалению, xgm очень часто напоминает мне старый анекдот:
Американский форум: задал вопрос — получил ответ.
Израильский форум: задал вопрос — получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты м*дак.
Всё конечно утрировано, но суть примерно та же. Во всяком случае, лично у меня такой именно опыт и речь сейчас не об этом курсе. Когда-то давно я пытался учить джасс на xgm, но мой интеллектуальный уровень был ниже, и статей было мало. В общем не получилось, а потом я подучил английский. Сперва я гуглял вопросы на русском языке и попадал на хгм, альтернатив так-то особо нет. Лишь когда ответов не было, я уходил на хайв. Скажу вам так, между русскоговорящей и англоговорящей аудиторией колоссальная разница. И дело не в размерах сообществ, хоть это и играет определенную роль, а в подходе к новикам. В русскоязычных сообществах новичка будут отговаривать от его затеи, говорить что слишком сложно, так сделать нельзя и т.д. В англоязычном сообществе, мало того, что всегда есть ответ или альтернатива, так еще есть и ответы на вопросы, но которые не смогли ответить в русскоязычном комьюнити.
Такой же опыт был у меня и с игровым конструктором game maker. Так что дело именно в русскоязычной культуре в целом, а не конкретном ресурсе.
Также практически весь материал, который большей частью еще находиться у меня в голове, взят с англоязычных источников или их переводов. А это про что-то да и говорит. Не ну я бы и рад их прочитать на русском, но их почти нет. С последнего я нашел только парочку обсуждений об агентах и утечках, что было полезно, но это была не статья.
А теперь два момента.
  1. К чему я это всё. Для того чтобы популяризировать "Развитие", думаю, нужно доказать то, что оно того стоит. Просто я не особо понимаю, а чего вы хотите? Не все способны и хотят делать крутые проекты, некоторые просто фанятся. Мы же вам не мешаем, да и вроде я не Моргенштерн, который портит молодые умы. Напишите статьи о ЛУА, я тоже посмотрю, может мне понравится. Я если честно не вникал в него, вообще не вкурсе фича ли это рефорджа, или его можно и в старых версиях беспроблемно использовать (это действительно важно). А то мы как в советском союзе, всё о светлом будущем, а в магазине у нас туалетной бумаги не найти.
Откуда же взяться приверженцам ваших идей, если они нигде не были изложены в достаточном объеме? Вот все якобы и деградируют.
  1. У меня лишних денег на рефордж нет, желания его покупать тоже нет, надеюсь по понятным причинам. У моих читателей ситуация аналогичная, осуждать их за это не стоит. Вообще-то варкрафту уже давно пора на помойку истории с такими рассуждениями, но только ситхи возводят всё в абсолют. Он Heroes 3 и Age of empire снова популярны в 2021 то году и ничего страшного. Там даже кастомки есть, а они еще страшнее чем в варкрафте.
Я понимаю, что меня и мою статью вроде уже оставили в покое, да особо и не задевали. Но сложно сдержатся и не вмешаться, когда у тебя за окном разгорается холивар. =)
0
6
3 года назад
Отредактирован N7 Molot
0
jass_dev:
Все по делу! Просто браво! И как же я тебя понимаю.
Пусть минусуют меня, тебя, и других, пусть срут дальше, говорят что ты тупой и топчишься на месте. Пусть дальше пропускают твои слова и примеры... Люди не хотят видеть то, что разнится от их мнений. Пусть дальше посылают людей идти в 1.31 и ловить краш на каждом шагу, или как это называется учиться учиться и учиться, да? Когда на старом патче ты тоже самое можешь сделать за 5 минут без краша. Клепать что-то на баганом 1.31 для 10-ти человек , или делать по старинке и быстрее для более большей аудитории (я приводил пример даже с КК клубом).
Лично мое мнение (основанное на фактах и работы/игры в нее, а так же то что я вижу работая в клубе) - рефордж, это провалище как игра. причем полное. думаю не стоит 100 раз расказывать про кучу багов которые уже второй год, остаются и под видом работы близардов, типа выпиливаются, ага))) Я рад что есть ЛУА, что есть куча людей таких как event, dracolich, автор этой статьи, и куча ребят которые сейчас помогаю с моделями, рисунками и т.д. И мне глубоко плевать на чем они это делают на mdlv'ce или в paint'e. Они не засирают тебя или других, как это делает добрая часть администрации здесь. И жаль что нечего не изменится.... Хорошо что есть Hive.
p.s. Автор, удачи тебе! Статья реально хорошая! Не слушай людей которые заходят сюда и одевают розовые очки с надписью "COOL ADMIN" и "ADMIN FRIEND"...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.