• Страница 1 из 1
  • 1
Модератор форума: Singler  
Форум » Warcraft 3 » Warcraft III » Worldeditor пишем триггеры (для чайников)
Worldeditor пишем триггеры
Weekless
Malware Overlord
Вввиду большого количества вопросов типа как писать триггеры или как сделать рпг решил сделать эту статейку...
Все играли в Warchasers? Наверное многие после этого хотели сделать что-нибудь аналогичное или более оригинальное, но не знали как сделать так, чтобы не появлялись стартовые 5 рабочих + главное здание, а чуть более продвинутые – как можно сделать выбор героя… Всё это делается с помошью триггеров, даже те самые 5 кренделей с домиком.
Триггеры – это функции, написанные на языке Jass, созданном Близзард для удобного создания карт в среде World Editor’a. Я понимаю что не каждый захочет учить целый язык, чтобы создать свою карту, а если этот человек никогда не программировал, то это вдвойне проблемно. Для того, чтобы продвигать Варкрафт в массы и обеспечить ему большую живучесть во времени, Близзард создали специальный конструктор триггеров. С его помощью написание триггера сводится к выбору мышкой соответствующих “кубиков” – аналогов строк на языке Jass. Кроме того, “кубики” имеют более понятный вид, так как содержат большее число взаимосвязанных слов, нежели на оригинальном языке. Другими словами, каждый ”кубик” визуально представляет собой небольшое, хоть и криво звучащее, предложение. Суть каждого триггера заключается в реагировании на какое-то общее установленное для него событие (кто-то умер, кто-то атакован, кто-то вошёл в какой-то регион, прошло определённое количество времени и т.д.). То есть триггер активируется некоторым событием или несколькими событиями (Events), после чего происходит проверка условий (Conditions) и если всё нормально, то выполняются действия.
Вначале было слово…
Окно редактора триггеров вызывается кнопкой с иконкой в виде буквы “a” в панели быстрого запуска. Кто не нашёл – жмите F4
Вы ещё тут? Надо же, тогда посмотрим внимательней открывшееся окошко… Оно делится на три окна, слева – список всех триггеров в карте, правое верхнее – комментарий к выделенному в списке триггеру (или к карте, если она выделена вместо триггера), правое нижнее – редактирование самого триггера. В окне списка всё устроено в виде древа на подобие проводника Windows, которое начинается от самой карты и заканчивается папками содержащимися в ней триггерами. Если кликнуть на карту, то в правом нижнем окне можно написать custom text code. Русским языком это блок кода на Jass, который будет выполнен ещё до триггеров с условием инициализации карты. На данный момент мы имеем папку Initialization и триггер Melee Initialization в ней. Мы тоже не хуже и можем создавать свои папки, триггеры и даже целые отдельные комментарии. Всё это может пригодиться для более удобной группировки ваших триггеров. Все триггеры и отдельные комментарии можно создавать только в папках. Создать папку в папке нельзя, так что для разграничивания большого количества триггеров внутри одной папки удобно использовать комментарии. Теперь вернёмся к нашим баранам. Melee Initialization – это триггер инициализации игры в обычном режиме схватки. Собственно говоря, в комментарии внутри об этом написано. Сам триггер сейчас имеет вид
Melee Initialization
Events
Map initialization
Conditions
Actions
Melee Game - Use melee time of day (for all players)
Melee Game - Limit Heroes to 1 per Hero-type (for all players)
Melee Game - Give trained Heroes a Scroll of Town Portal (for all players)
Melee Game - Set starting resources (for all players)
Melee Game - Remove creeps and critters from used start locations (for all players)
Melee Game - Create starting units (for all players)
Melee Game - Run melee AI scripts (for computer players)
Melee Game - Enforce victory/defeat conditions (for all players)
(Русский вариант я не представлю – лень переводить и переписывать. Вообще, учите инглиш, в жизни пригодится  )
На этом примере рассмотрим устройство триггера.
Events (события)
Движение – жизнь
События, как уже говорилось выше, активируют триггер. В некоторых случаях можно обойтись и без них, но об этом я напишу позже. К каждому событию есть комментарий в помощь от разработчиков, так что я напишу только про общие группы. Надеюсь проблем добавить или изменить событие не возникнет ни у кого (иначе вам прямая дорога читать “компьютер для чайников” ).
А вот более подробно я остановлюсь на группах событий. Всего девять типов групп, причём первые три также встречаются и в условиях, и в действиях (у меня стоит английская версия редактора, так что русские эквиваленты встречаемых в статье названий могут отличаться):
All (все) - тут и так понятно, отображение всего списка событий;
Search for text (поиск по тексту) – поиск нужного события по его названию в списке;
General (общие) – тут только map initialization. Данное событие выполняется при загрузке карты.
Остальные шесть – это события, сгруппированные по каким-то признакам
Destructible (разрушимое) – список событий, связанных с разрушимыми объектами (деревья, бочки, словом всё то, что находится в соответствующем меню палитры Doodads);
Dialog (диалоговое окно) – тут только событие “нажата кнопка диалогового окна”;
Game (игра) – события, связанные с некоторыми нюансами игровой оболочки (реагирование на время дня находится здесь);
Player (игрок) – события, связанные с действиями игрока;
Time (время) – события, связанные со временем;
Unit (юнит) – события, касающиеся юнитов (кто-то умер, кто-то вошёл в регион, кто-то атакован).
Можно создать несколько событий одновременно, тогда триггер будет запускаться каждый раз, когда будет происходить любое из них.
Conditions (условия)
Быть или не быть?
Иногда возникают ситуации, когда события нужно как-то ограничить. Например нам нужно чтобы из всех сдохших футманов (пехотинцев) появлялись скелеты (пусть скелеты будут доставаться тому игроку). События не могут уточнять тип юнита, поэтому нам понадобится условие. Вот как это будет выглядеть (без спец эффектов):
example
Events
Unit - A unit Dies
Conditions
(Unit-type of (Dying unit)) Equal to Footman
Actions
Unit - Create 1 Skeleton Warrior for (Owner of (Killing unit)) at (Position of (Dying unit)) facing (Facing of (Dying unit)) degrees

Так как не существует событие связанное с типом юнита, мы используем условие, может проверить это. В случае если умирающий юнит не является футманом, то скелет не появится. Но используя такой триггер, игрок может убивать своих футманов и получать скелетов для себя Это можно исправить, добавив ещё одно событие:
example
Events
Unit - A unit Dies
Conditions
(Unit-type of (Dying unit)) Equal to Footman
(Owner of (Killing unit)) Not equal to (Owner of (Dying unit))
Actions
Unit - Create 1 Skeleton Warrior for (Owner of (Killing unit)) at (Position of (Dying unit)) facing (Facing of (Dying unit)) degrees
Теперь убивая своих футманов (даже случайно, например от splash урона собственной мортиры людей или катапульты орков), игрок не получит халявного скелета (в случае случайного самоубийства скелета вообще не будет).
Все условия тоже сгруппированы, рассматривать каждую группу из них – очень долгое занятие, так что разберётесь сами. Там нет ничего сложного, всё написано, нужно только чуть-чуть поизучать какое условие что проверяет в рамках самого редактора.
В самом низу списка условий есть такие, как AND и OR. Это чисто из программирования, создано для большей конкретизации, избегания лишних строк программного кода и для того, чтобы не ломать голову над реализацией организации мультиусловий. Короче, AND – это объединение. Нужно для объединения (круто, да?) нескольких условий. Для выполнения триггера нужно чтобы выполнились все условия, содержащиеся в AND одновременно. Что касается OR, то для выполнения триггера достаточно чтобы выполнилось одно из связанных ним условий. Также есть AND и OR для нескольких условий – на мой взгляд это удобнее в любом случае. Почему – узнаете сами.
Скорее всего у вас возник вопрос почему в своём примере я не использовал AND. Ответ прост – в редакторе триггеров это не обязательно. Все указанные условия автоматически объединяются в невидимый AND, то есть нужно чтобы каждое из них выполнилось. Поэтому в использовании AND практически никогда не возникает необходимости.
Actions (действия)Они ублии Кенни!!! (с)
Самая большая часть триггера. Здесь пишутся все действия… Их много… Просто поизучайте каждую группу, могу сказать одно – главное придумать то вам нужно, а как это сделать – ищите в списке и комментариях к каждому действию. Стоит отметить только то, что есть возможность включать триггеры, выключать их, принудительно запускать (группа Trigges или триггеры). То есть можно принудительно запустить какой-нибудь триггер, даже если у него нету событий или их нужно просто проигнорировать. У вас хватило терпения дочитать до сюда? Чтож, значит моё время не было потрачено впустую. Вроде бы я рассказал самое основное. Удачи, чайники. Теперь вы начинающие мапперы Можете смело открывать Warchasers и драть оттуда триггеры с выбором героя и редактировать их под себя.

взято с wc3

user: weekless
pass: wowjpnetort
Сообщение # 1 написано 01.02.2011 в 10:46
__TR@NS4MER__
Рыцарь
Ну если учитывать, что большинство мапмейкеров СНГ пользуется русификатором триггеров, я думаю, стоило бы функции перевести (Событие/ Условие/ Действие). Могу помочь с этим делом ;). Как раз есть под рукой ВЕ с русскими триггерами.
Сообщение # 2 написано 01.02.2011 в 11:03
RazArt
Тазовод
Derossa, хоть бы оформил и линк на первоисточник дал)
__TR@NS4MER__, большинство мапмейкеров вообще обходят гуи стороной
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 3 написано 11.02.2011 в 11:14
Driga
Чемпион
RazArt, Если зайти на epicwar.com где оч много карт, то там...... какую карту не скачай всё сделано от балды хд и если сделать статистику, там где то 80% карт на гуи
Сообщение # 4 написано 18.02.2011 в 14:36
RazArt
Тазовод
и что дальше? никто же не запрещает выкладывать туда всякий треш
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 5 написано 19.02.2011 в 23:43
WindCrack
Сержант
Хотелось бы увидить что нибуть про Хеш-Таблицы. wink



Сообщение # 6 написано 11.03.2011 в 22:29
RazArt
Тазовод
WindCrack, http://xgm.ru/forum/showthread.php?t=30742
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 7 написано 12.03.2011 в 12:01
bboyFenix
Скаут
народ, у меня вопрос к опытным волд эдиторам
может кто играл в Defi4nc3's ORPG
там интересная система скилов(скажем так, самая офегительная система скилов что я видел):
у всех чаров есть как бы 2 скила(но когда нажимаеш на один из них - открывается новое окно с 11ю скилами, ну как знаете если играть на растройку у раба есть скил строить и когда нажемаеш на него -
открывается новое окно с выбором зданий для постройки, только там не здания, а скилы)
вобщем благодаря этому у чаров в этой рпг оч много скилов, что делает эту карты очень интересной.

вопрос состоит в том как это сделать???оО =)...я тупо немогу дупля дать вобще
жду ответы с нетерпением, выручайте=)

p.s кто не играл в эту карту и любит РПГшки в варике, оч советую, карта бомба!
Сообщение # 8 написано 05.12.2011 в 03:52
RazArt
Тазовод
bboyFenix, гугли - spellbook jass
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 9 написано 01.02.2012 в 14:12
Evil_Illidan
Скаут
Да лучше используйте JASS code через него можно почти все.
Сообщение # 10 написано 19.03.2012 в 08:35
gmltA
Сержант
Quote (RazArt)
bboyFenix, гугли - spellbook jass

Но это можно же и безз JASS сделать, а через обычный спелл Книги Заклинаний.
CellCore development team
Сообщение # 11 написано 19.03.2012 в 09:28
Форум » Warcraft 3 » Warcraft III » Worldeditor пишем триггеры (для чайников)
  • Страница 1 из 1
  • 1
Поиск: