|
|
Модератор форума: Singler |
Форум Warcraft 3 Warcraft III Worldeditor пишем триггеры (для чайников) |
Worldeditor пишем триггеры |
Вввиду большого количества вопросов типа как писать триггеры или как сделать рпг решил сделать эту статейку...
Все играли в 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 Так как не существует событие связанное с типом юнита, мы используем условие, может проверить это. В случае если умирающий юнит не является футманом, то скелет не появится. Но используя такой триггер, игрок может убивать своих футманов и получать скелетов для себя Это можно исправить, добавив ещё одно событие: взято с wc3
user: weekless
pass: wowjpnetort
Сообщение # 1 написано 01.02.2011 в 10:46
|
Ну если учитывать, что большинство мапмейкеров СНГ пользуется русификатором триггеров, я думаю, стоило бы функции перевести (Событие/ Условие/ Действие). Могу помочь с этим делом ;). Как раз есть под рукой ВЕ с русскими триггерами.
Сообщение # 2 написано 01.02.2011 в 11:03
|
Derossa, хоть бы оформил и линк на первоисточник дал)
__TR@NS4MER__, большинство мапмейкеров вообще обходят гуи стороной
DumpMe v1.0 - система автоматического переноса персонажей
Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 3 написано 11.02.2011 в 11:14
|
народ, у меня вопрос к опытным волд эдиторам
может кто играл в Defi4nc3's ORPG там интересная система скилов(скажем так, самая офегительная система скилов что я видел): у всех чаров есть как бы 2 скила(но когда нажимаеш на один из них - открывается новое окно с 11ю скилами, ну как знаете если играть на растройку у раба есть скил строить и когда нажемаеш на него - открывается новое окно с выбором зданий для постройки, только там не здания, а скилы) вобщем благодаря этому у чаров в этой рпг оч много скилов, что делает эту карты очень интересной. вопрос состоит в том как это сделать???оО =)...я тупо немогу дупля дать вобще жду ответы с нетерпением, выручайте=) p.s кто не играл в эту карту и любит РПГшки в варике, оч советую, карта бомба!
Сообщение # 8 написано 05.12.2011 в 03:52
|
| |||
| |||