Советуем ознакомиться со всей базой статей по триггерам редактора (и не только).
0. Вступление
Этот цикл статей посвящен изучению языка jass (создание текстовых триггеров, так называемых скриптов). Хотя про jass уже написано достаточное число статей, но многие картостроители все равно не желают его изучать. И я их вполне понимаю – для тех, кто не занимается программированием в тех статьях, которые имеются, разобраться довольно сложно. Не хватает некоторых базовых знаний, не понятно, с чего начинать и т.д.
Любой учитель знает, что излагать предмет надо поэтапно и в определенной последовательности. Я выбрал последовательность в том порядке, в котором сам когда-то начал осваивать язык jass. Так что триггерщики, которые до сих пор не решаются приступить к изучению jass, смогут проделать тот же путь.
Эти статьи я написал для одного своего друга триггерщика. И друг вполне оправдал мои ожидания - не прошло и месяца, как он стал jass-ером.
Любой учитель знает, что излагать предмет надо поэтапно и в определенной последовательности. Я выбрал последовательность в том порядке, в котором сам когда-то начал осваивать язык jass. Так что триггерщики, которые до сих пор не решаются приступить к изучению jass, смогут проделать тот же путь.
Эти статьи я написал для одного своего друга триггерщика. И друг вполне оправдал мои ожидания - не прошло и месяца, как он стал jass-ером.
Для удобства, я буду обращаться в статьях к читающему – «Читатель». Надеюсь, что читатель уже неплохо овладел триггерами, знает, что такое переменные, массивы и циклы.
Содержание:
- Вступление
- Что есть jass и для чего он нужен
- Локальные переменные
- Применение локальных переменных
- Условия, циклы в jass
- Функции на jass
- Устройство триггера с точки зрения jass
- Динамическое создание триггера
- События с малым периодом
- Полярные координаты (ликбез)
- Оптимизация: утечки памяти
- Устарело - RETURN BUG (RB)
- Тип Handle
- Устарело - Система Super Custom Value (SCV) или RB+cache
- Да здравствует SCV!
- Послесловие
- Устарело - Приложение 1: проблемы Кеша и РБ
- Приложение 2: JESP стандарт
Осваиваем JASS - исправления и дополнения - также рекомендуется для ознакомления.
1. Что есть jass и для чего он нужен
Итак, Читатель, мы приступаем к освоению jass. Прежде всего, я хочу, чтобы ты понимал, что jass не является чем-то сверхъестественным и необычным. Многое, из того, что нам предстоит изучить уже будет знакомо по триггерам. И неудивительно – ведь каждое триггерное действие имеет свой аналог на jass.
Дело в том, что blizzard создали свой миниязык программирования jass. Они хотели упростить работу по программированию сценариев и их правил. Но даже такой упрощенный язык слишком сложен для многих картостроителей. Поэтому был создан редактор Trigger editor – где вместо того, чтобы набирать команды вручную, можно создавать триггеры путем выбора команд из списка. В редакторе мы работаем с триггерами, но когда игра запускает определенный сценарий, она читает не триггеры, а КОД, который создается путем перевода всех триггеров игры на язык jass.
По сути триггеры – это надстройка для языка jass упрощающая ввод команд. Но при любом упрощении происходит потеря функциональности. Т.е. возможности программирования игры триггерами в чистом виде заметно меньше, чем при программировании при помощи jass.
Итак, jass дает картостроителю новые возможности. Но стоят ли они того, чтобы их изучать? Это уже каждый картостроитель решает для себя. Jass может помочь в следующих случаях:
- Упростить создание сложных триггеров и триггерных систем, которые позволят полностью или почти полностью поменять правила оригинальной игры.
- Создавать триггерные заклинания, у которых нет аналогов в оригинальной игре.
- Оптимизировать карту, сделать, чтобы сложные триггеры не тормозили игру.
- Вставить на карту некоторые команды на jass, которые не имеют аналогов для обычных триггеров.
- Создавать собственные AI, более гибкие, чем в редакторе AI.
У некоторых бытует мнение, что на jass в игре можно сделать все. Конечно же, это не так. Более того, я не рекомендую писать все триггеры сценария исключительно на jass. Для многих задач редактор триггеров подойдет лучше – ведь это действительно очень удобная штука.

WC3




и почитай правила, а то после возникли вопросы по твоему знанию русского языка
и для вопросов есть модуль Q/A
ну сначала пишем структуру инвентарь
потом структуру слот(юзаем динамичную текстуру)
потом структуру тип итема
потом взаимодействие между ними
потом создаём экземпляры этих структур в нужных количествах
всё
инвентарь готов
Сейчас я поведу речь только о секции 0-1 (далее - статья), то есть конкретно о данной части рассматриваемого цикла статей.
- На протяжении всей статьи автор предпочитает писать "JASS" маленькими буквами. Регистр букв вносит понимание того, что речь идёт об аббревиатуре. То есть, для правильной подсознательной передачи смысла стоит писать не !jass!, не !Jass!, а именно ?JASS?. Повторюсь - грамотное написание облегчает восприятие. Любопытный факт - в заголовке официальной статьи о JASS в Википедии аббревиатура не написана в верхнем регистре. Во всех прочих местах статьи написание аббревиатуры верное.
- Нигде во вводной части статьи не сказано о том, что JASS расшифровывается как Just Another Scripting Syntax ("Ещё Один Синтаксис Скриптования"). На русский язык аббревиатура JASS переводится как ЕОСС, но так как заимствование английского сокращения гораздо привычнее как в рамках этого сайта, так и в рамках некоторых других сообществ, имеющих WarCraft III в списке своих тематик, мы просто оставим англоязычную аббревиатуру JASS.
- Совсем нелишне будет добавить словарик "сленга" (специфических терминов среди тех, кто использует JASS). Далеко не каждый знает, что такое:
- Джассер (джасскодер, скриптер, кодер) - человек, знающий и умеющий применять JASS.
- Сетить (реже - ассигнить) - присваивать значение какой-либо переменной.
- ЯП - аббревиатура от словосочетания "язык программирования".
- Гуй (гуи, триггер) - графический интерфейс для работы с JASS. Сленговое определение возникло из англоязычной аббревиатуры GUI (Graphical User Interface), которая переводится как "Графический интерфейс пользователя" как в данном (относительно JASS), так и в общем контексте (в программировании в целом это общепринятый термин).
- Компилировать (сейвить, собирать, компилить) - обычно означает сохранять карту для дальнейших проверок работоспособности кода, написанного на JASS. Общее определение компиляции как подготовки кода для обработки процессором сюда не подойдёт, так как JASS работает через посредника - он инструктирует движок, на котором написан WarCraft III, как нужно использовать свои функции, а уже сам движок работает непосредственно с процессором. Таким образом, компиляция JASS - это подготовка кода для корректной работы с движком WarCraft III. Не от всего защищает, правда, но это уже другая история, требующая более детального разбора языка.
- Нативки - функции JASS, которые перечислены в файле common.j: эти функции обращаются к функциям ядра WarCraft III напрямую, без привлечения дополнительного кода JASS. Эти функции используются большинством других, которые написаны пользователями (исключая, разумеется, функции, где используется только арифметика) и являются основой JASS.
- БЖ - функции JASS, которые перечислены в файле blizzard.j (отсюда и название - BJ или БЖ): подавляющее большинство этих функций активно используют нативки. Некоторые из этих функций действительно полезны и являются дополнительным облегчением нелёгкого труда программиста, другие являются "дубликатами" нативок (БЖ-функция называется так же, как и нативка, которая в ней содержится, с добавлением приставки BJ, иногда с небольшими изменениями аргументов). Из-за того, что большинство БЖ-функций не умеют правильно работать с памятью, их ругательно называют говнокодом. БЖ-функции были изначально созданы для адаптации нативок к GUI (редактору триггеров), чтобы несведующему картоделу было легче разобраться в сути инструкций, которые предоставляет JASS. Небольшой пример - в GUI работа с цветами и альфа-каналом для облегчения восприятия осуществляется в процентах (интенсивность цвета задаётся от 0% до 100%), в то время как нативки работают с целочисленными значениями от 0 до 255 по компьютерному стандарту представления цветов, который известен большинству программистов из школьного курса информатики. Одни ветераны JASS-фронта рекомендуют отказаться от использования BJ-функций вообще, другие - внимательно смотреть их содержание. Сам отношусь к последним.
- Начинка - содержание той или иной функции.
- Обнуление (реже - нуллификация) - очистка значения переменной-ссылки (типа, сводящегося к типу handle), то есть присвоение ей значения null.
- Кастом (реже - КС или CS) - понятие, означающее Custom Script (пользовательский код). Это понятие больше относится к GUI, поскольку означает прямое прописывание строки JASS без конвертации всего триггера в код. Назван по одноимённой функции в арсенале GUI Варкрафта.
- Хендл - любой сводящийся к handle тип переменной в JASS (коих 99%, существует только 4 нехендловых типа переменных: integer, real, boolean, string). В силу своей природы и страсти к засорению памяти (к сожалению, сборщик мусора в JASS не реализован), программистам напоминают о необходимости чистки кода, то есть ручном удалении хендлов после их использования. Сленговое понятие возникло из названия родительского типа handle и является его транскрипцией на русский язык.
- Хардкод - код, вшитый в ядро, содержание которого мы не можем посмотреть. Зачастую является причиной непонятных вещей в работе программы, потому что программист, увы, не может узнать, что находится за стеной, которой программисты намеренно отделили исходный код ядра от пользователей JASS. Мы не знаем, как код работает с памятью - можем только догадываться. Поэтому хардкод наиболее рационально трактовать как часть кода, скрытая от глаз программиста в каких-либо целях.
- Утечки - использованные, ненужные, но не очищенные из памяти объекты, приводящие к падению производительности кода. Начинающие JASS-программисты часто добавляют сюда и понятие висячих ссылок, что неправильно, потому что утечка памяти и висячая ссылка - разные вещи.
- Думаю, нет необходимости дважды писать содержание статьи. Тем более, что верхнее кликабельно.
- Ссылка Осваиваем JASS - исправления и дополнения не кликабельна. Скорее всего, статья настолько старая, что помнит ещё эру XGM.RU (известно из истории сайта).
- Не бойтесь ссылаться на источники. Смело давайте ссылки на то, что позволит читателю больше узнать об используемом термине. Взять, к примеру, вот этот абзац:
Эту кучу текста можно сделать намного лаконичнее, вот таким образом: Заметьте - несмотря на то, что текста больше, читается он намного легче. Присутствие ссылок на другие ресурсы (как в пределах XGM, так и на общепринятые (Википедия и т.п.)) подчёркивает то, что статья написана человеком, разбирающимся в вопросе, компетентным, ссылающимся на другие материалы ради облегчения восприятия.Стоит заметить, что разметка txt2, которую использует сайт, поддерживает вставку таблиц. Эту функцию здесь можно применить по назначению.
Между разделами должна наблюдаться связь. Один раздел должен вытекать из другого (либо все остальные разделы должны вытекать из первого). К примеру, при описании преимуществ JASS стоит выделить создание локальных переменных (отсылка к разделу 2-3), доступность большего количества типов для работы с ними (в особенности с типом trackable, для которого поддержка в GUI не предусмотрена), больше возможностей для удаления висячих ссылок (отсылка к разделу 10) и многое другое.
Автор, Ваша правда, на JASS невозможно сделать с WarCraft III всё, что угодно. Однако, JASS открывает максимальный потенциал World Editor'a. Скажем, создать такую карту, как Гран-при Азерота, одними лишь средствами GUI было бы крайне затруднительно - карта бы не была такой производительной без прямого использования JASS. Порекомендуйте читателю посмотреть исходник этой карты - там найдётся много интересного. У читателя появится мотивация разобрать этот исходник. Доверять Вам они будут из-за того, что карта сделана Blizzard - разработчиками игры, причём для демонстрации возможностей JASS. А Ваш цикл статей должен помочь в этом.
Успехов Вам в нелёгком труде написания статей, а читателям - в освоении материала!
Ред. Singularity
А вот со словариком я согласен, в свое время меня это немного сбивало с толку.
Ред. Singularity
Насчёт пунктов, воспринятых придирками: