RazArt
offline
Опыт:
11,197Активность: |
Пособие по триггерам для начинающих
ВведениеЕсли Вы являетесь новичком в создании карт для любимой, большинством играющего населения планеты, игры Warcraft III, то вам должно быть интересно как устроена система "программирования" для неё. специально для игр этой серии, мастерами из "Blizzard" был создан язык скриптов под названием Jass. В принципе он очень похож на остальные языки программирования и если Вам приходилось раньше писать программы, то он не должен показаться вам очень сложным в освоении. Для облегчения работы с ним были созданы специальные надстройки - GUI(Триггеры). Глава 1. Начало работы с редакторомДля начала работы вам необходимо создать\открыть уже существующую карту и запустить "Редактор Триггеров". Чтобы это сделать, необходимо найти на панели инструментов иконку с изображением буквы "а" или нажать на клавишу "F4" находясь в окне редактора. Итак, начнём по порядку. Редактор триггеров состоит из нескольких блоков: Панель управления, с вынесенными на неё основными клавишами. Для работы с триггерами используются только семь кнопок: Переменные (Cntr+B), Новая категория (Cntr+G), Новый триггер (Cntr+Е), Новый комментарий к триггеру (Cntr+M), Новое событие (Cntr+E), Новое условие (Cntr+D) и Новое действие (Cntr+R). Остальные являются общими и используется во всех окнах редактора Список триггеров. Для удобства работы с ними можно создавать различные категории, в будущем, при компиляции кода они не будут учитываться и поэтому названия могут содержать в себе кириллицу, а вот названия триггеров не могут содержать в себе кириллических букв, а также не могут повторяться, даже находясь в различных категориях. Текстовая зона , в ней находиться описание триггера. В ней Вы можете написать основные принципы работы триггера, действия, которые он выполняет, список переменных, которые нужно создать, чтобы перенести этот триггер в другие карты. В общем любую информацию Окно кода триггера. Пожалуй, самая важная часть редактора триггеров. В ней Вы можете редактировать и создавать код карты. Подробнее о нем узнаем в следующей главе Глава 2. Структура триггеровКаждый триггер состоит из 3 частей:
Условия.Следующим этапом будет заполнение пункта “Условия”. Это необходимо для сужения области применения триггера. Например, вам необходимо отследить применение какого-либо заклинания, тогда нужно создать событие ( щелкнув для этого правой кнопкой мыши и выбрав пункт “Новое событие(New Event)”) “Generic Unit Event”, выбрав там пункт “Начинает Применять Способность”. Далее нужно создать новое условие (аналогично созданию события) и выбрать там пункт “Ability Comparison”, после чего триггер примет примерно такой вид : Код:
Действия. Это является самой главной частью любого кода. Благо действий в редакторе карт достаточно чтобы превратить Warcraft в нечто новое и (надеюсь) оригинальное. А вообще создание действий аналогично созданию событий и условий. Триггеры являются своеобразным “конструктором” в который нужно просто подставлять нужные вам условия, действия и т.д. Каждый триггер имеет 2 состояния: включён и выключен соответственно. Чтобы выключить триггер необходимо нажать правой кнопкой мыши и выбрать пункт “Изначально включён”. Для работы с триггерами используется вкладка “Триггер” при выборе действия. Включение и выключение триггеров даёт массу особенностей. Например, если вам нужно при нахождении определённого артефакта у юнита, давать ему золото, то легче отследить нахождение у юнита этого артефакта и включить триггер, дающий золото определённому игроку. Также это можно реализовать и просто одним включенным триггером, проверяя при каждом исполнение значение переменной, означающей находится ли артефакт у юнита (Например, переменная типа “Логическая (Boolean)”) и делать тоже самое, но вместо включения триггера поставить действие, которое изменит значение переменной на противоположное Глава 3. ПеременныеДля улучшения работы с кодом можно использовать переменные. Они значительно упрощают работу с кодом и могут помочь при оптимизации. Все переменные делятся на Локальные и Глобальные. Сначала мы остановимся на изучении Глобальных переменных, т.к. Локальные переменные редко используются триггерами, но тем не менее являются важной частью изучения. Для создания глобальных переменных необходимо нажать, находясь в редакторе триггеров, сочетание клавиш “Ctrl + B”. Переменные имеют множество типов, можно создать переменные со значением юнитов, чисел, спецэффектов и т.д. Чтобы изменить значения переменной, необходимо создать действие “Set Variable”, выбрать в настройках переменную и значение. Использование переменных может значительно улучшить быстродействие игры. Например, можно занести в переменную позицию того или иного юнита и больше не использовать функцию определения положения вообще. Также переменные можно использовать как средство обмена информации между другими триггерами проекта. Ну а теперь мы перейдём к локальным переменным. Эти переменные создаются и используются в пределах 1 функции. Они являются “универсальным” средством создания чего-либо. Локальные переменные редко применяются в триггерах, а в Jass’е просто незаменимы. Все же средствами триггеров можно использовать и их, но это практически нигде не применяется, а используют сразу Jass. Это своеобразное использование жасса прямо в триггерах. Для этого существует действие “Custom Script” . Вообще действие “Custom Script” используется для вызова функций из особого Custom Script’а карты, написанного кстати на Jass’е и интерпритируется как обычный Jass код, чтобы отредактировать или просто посмотреть его необходимо нажать на пункте, имеющим название вашей карты в списке всех триггеров (Подробнее можно узнать о Custom Script’е при изучении самого жасса, но это не имеет никакого отношения к данному пособию). Очень важным аспектом в изучении переменных являются массивы. Массив по сути это переменные с множеством значений. Например, чтобы записать всех юнитов на карте достаточно лишь 1 массива. Значения массивов меняются так “<Имя переменной массива>[номер элемента] = значение переменной” и считываются аналогичным способом. Глава 4. Условия и ЦиклыОчень важным элементом в создании карт являются условия и циклы. Сначала поговорим об условиях. Чтобы объявить новое условие необходимо создать действие “If /Then/Else”. Данное действие состоит из 3 частей. Первая часть это условие, вторая часть это действие, если условие вернёт истину, то оно будет выполняться, а третья часть это действия, но только те, которые будут выполняться, если вернётся лож. Теперь попытаюсь объяснить это всё на примере: Код:
Теперь при исполнении данного условия будет меняться значение переменной, если она была равна нулю, то станет равна единице и наоборот, если она была равна единице, то станет равна нулю. Следующим шагом будет изучение циклов. Они также являются практически неотемлемой частью любого кода. Если в вашей карте не будут использованы условия и циклы, то скорее всего ваша карта даже не доживёт до релиза и если честно я не встречал ни одной хорошей карты, в которой бы не было циклов или условий. И так начнём. Циклы используются в картостроении для выполнения однотипных действий. Примером может служить изменение переменных массива. Циклами являются все действия начинающиеся на “For Each…”, всего их 6 и каждая имеет свой синтаксис написания. В принципе они все похожи и разбирать каждую в отдельность нет смысла, поэтому мы остановимся на самой первой “ For Each Integer A, Do Multiple Action”. Удобство работы с этой функцией заключается в том, что можно менять не весь код функции сразу, как в “ For Each Integer A, Do Action ”, а по отдельности каждую строку. Число, равное количеству раз выполнения цикла, является переменная типа “Integer (Целочисленная)”. Чтобы получить её значение необходимо использовать вместо переменной функцию “For Loop Integer A”. Для примера используем вот такой код: Код:
Данный пример очищает переменные “Hero[1]”, “Hero[2]” , “Hero[3]”, … , “Hero[12]” от всех записанных в них значений. Также есть ещё одна интересная функция, функция “ For Each Integer Variable, Do Multiple Action”. Она нужна для замены переменной “A” на любую вашу переменную типа “Integer (Целочисленная)”. Синтаксис этой функции отличается от ранее рассмотренной и поэтому я приведу пример кода Код:
Я думаю все нашли отличия этих функций, но если перевести эти функции в Jass, то вы не найдёте никаких отличий за исключением названий переменных. Для первого примера создается локальная переменная с названием “bj_forLoopAIndex”, а во втором примере вместо этой переменной просто используется ваша. А вообще все эти шесть функций в текстовом виде выглядят одинаково и созданы в триггерном виде лишь для упрощения работы с циклами. Глава 5. Различные секреты и примеры их исполненияКак уже говорилось ранее, возможности триггеров практически безграничны. Большинство задач, которые казалось бы невозможны, можно с их помощью реализовать. На основе Warcrat’а были созданы множество других жанров. Начиная с гонок и заканчивая логическими играми. Некоторые секреты я и попытаюсь реализовать в этой главе. Сборные артефакты.Когда я только начинал программировать для этой игры, мне казалось что сборные артефакты это стандартная функция варкрафта. Это было реализовано практически во всех картах, в которые я играл. На самом же деле все не так просто. Или все же просто? Вот пример кода собирающего два и более артефактов в один: » Код Код:
Теперь буду объяснять что здесь написано. Во-первых необходимо отследить получение юнитом предмета, для этого используется событие “Generic Unit Event ”с выбранным “Получает предмет ”. Далее мы проверяем нахождение у юнита определённых артефактов и если они есть, то забираем их и даём другой. Все просто, но эта система далеко не универсальна, а точнее с помощью неё нельзя отследить нахождение у юнита два одинаковых артефакта. Самый распространенный способ это сканирование всех слотов на артефакты. Для этого мы создадим переменную типа “Целочисленная (Integer)”, назовём её “ ItemCount ” и рассмотрим этот код: » Код Код:
В начале, как и в прошлом действии, мы отследили получение юнитом предмета. Потом очистили переменную “ItemCount” от значения, вписанного в неё ранее. Следующем действием было сканирование слотов героя на нахождение определённого артефакта и если он находить у героя, то увеличиваем значение переменной “ ItemCount” на единицу. Далее проверяем значение переменной и если оно окажется больше или равно 2, то забираем 2 раза артефакт и даём другой. Вот и все, теперь и Вы можете создавать реалистичные системы артефактов используя данной код. Данная статья была написанна RazArt'ом, специально для XGM Отредактировано RazArt, 30.12.2008 в 10:41. |
14.11.2008, 16:33 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Dr
offline
Опыт:
48,871Активность: |
В базе на эту тему есть:
http://xgm.guru/articles.php?name=trigger_basics Отредактировано SC, 03.01.2009 в 22:24. |
14.11.2008, 16:46 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Dron, Я искал статью на форуме и не нашёл про тригеры, а вот на сайте забыл, т.е. вы удолите её, просто я 2 дня её писал)
Я писал сначал эту статью для другова сайта, там она понравилась и я решил суда выложить. |
14.11.2008, 16:50 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Bermoff
offline
Опыт:
4,101Активность: |
Действительно,в статье,на которую дал ссыль Dron описано не хуже(а мб и лучше),так что,имхо,эта статья не актуальна...
|
14.11.2008, 16:50 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
А смысл писать то, что уже давно написано? |
14.11.2008, 16:50 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Dr
offline
Опыт:
48,871Активность: |
Удаляется в крайнем случае (ошибки, тупости, плагиат и т.п.), просто повторы на сайт не льются.
С грамматикой всё нормально. Отредактировано Dron, 14.11.2008 в 16:57. |
14.11.2008, 16:51 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Bermoff, я пока что учусь писать статьи и мну кажется что неплохо получилось, а вот твоих статей я не видел)
|
14.11.2008, 17:01 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Jaffa
offline
Опыт:
7,282Активность: |
спасибо огромное)
Jaffa добавил: статья супер)), p.s. мой друг прочитал) незная редактора, понял многое)) |
14.11.2008, 23:01 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
PlayerDark
Coraline
offline
Опыт:
10,569Активность: |
Это уже было, хотя я думаю что можно разместить на сайте в качестве альтернативного учебника. |
15.11.2008, 15:40 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
альтернативный учебник может спокойно существовать и в разделе желтой прессы |
15.11.2008, 16:17 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Ну если вы считаете что здесь мало информации, то я могу расширить статью, написать более подробно, завтра постараюсь дописать |
15.11.2008, 20:52 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
дьяволенок
r@per
offline
Опыт:
1,632Активность: |
Статья очень хорошая особенно для нубов. Я сам ничего не понимаю в триггерах. Но по статье JokArt я понял как примерно работают триггеры. А вот по статье на xgm я вообще ничего не понял.
|
16.11.2008, 13:13 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
BreaK_DanceR
offline
Опыт:
537Активность: |
Неплохая статейка))) хороша для новичков, (сам хоть и новичок - ничё нового не узнал) если бы еще можно было всякие идеи и хитрости выложить... эх) |
17.11.2008, 07:01 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
and_y87
Тру Кодер
offline
Опыт:
21,030Активность: |
Нуда... вроде не чё так...
Есть куда нубов засылать =)) |
17.11.2008, 07:15 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Всетаки есть хорошие отзывы, не зря писал) |
17.11.2008, 11:32 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Gres
Кораэлестраз
offline
Опыт:
18,575Активность: |
Цитата:
Да ты че... статья кулЪ! побольше бы только разных хитростей описал бы... неплохо было бы объяснить новичкам по ходу дела что такое CS=Custom Script, а то такой вопрос уж больно часто встречается! |
|
17.11.2008, 13:07 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Gres, ну какой отношение CS имеет к триггерам? Всмысле он написан на жассе, а про хитристи, то я щас начну писать новую главу, вернее не хитрости, а советы как что-либо сделать)
JokArt добавил: Вот написал про создание сборных артов) Сейчас немного некогда, но когда приду напишу ещё несколько |
17.11.2008, 17:27 | #17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Manhant
Убежал
offline
Опыт:
14,787Активность: |
Оч хорошая статья для новичков мне лично больше понятна чем другие ) |
17.11.2008, 18:45 | #18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Fakov
Viva la Fa
offline
Опыт:
102,058Активность: |
написано понятно, но не совсем для дураков. Новичкам думаю будет удобно разобраться и понять че к чему. Вообщем хорошая статья. |
17.11.2008, 20:05 | #19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Fakov, ну если новички будут совсем не дураки и у них будет цель научиться делать карты не хуже (а мб даже лучше:) доты, то я думаю поймут) Да и многие говорили что наоборот она слишком разжёванная
|
17.11.2008, 20:08 | #20
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|