Форум портала о WarCraft Форум портала о WarCraft
порно чат

Вернуться   Форум портала о WarCraft > Вселенная WarCraft > World Editor > Статьи
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Опции просмотра
Старый 24.07.2010, 22:34   #1
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Текстовые триггеры

Текстовые триггеры

В этой статье я расскажу про текстовые триггеры, что это такое и зачем они нужны. Warcraft 3 создавался на определенном языке программирования (скорее всего на C). Создатели игры решили создать редактор worldedit, чтобы упростить работу себе и другим людям по созданию карт. Для начала они создали свой миниязык (текстовые триггеры), команды которого позволяли управлять игрой. Однако язык этот был бы слишком сложен для тех, кто не занимается программированием и поэтому был создан редактор Trigger editor, который заметно упрощал работу.

Вместо того, чтобы вводить текстовые команды вручную, разработчик карт выбирет определенную команду из списка иуказывает определенные параметры (на самом деле, эти триггеры – из Trigger Editor при сохранении карты автоматически переводятся на другой язык - custom text - это файлы с расширением .j , а затем исполняются).

Итак, custom text близок к тому языку, на которм был написан warcraft3. Если бы blizzard сделали хороший Trigger Editor – то работать с custom text не имело бы смысла.

Однако не все команды из custom text доступны в Trigger Editor. Пример: команда добавления таймера жизни юнита. Ее нет среди обычных команд Trigger Editor. Есть и другие примеры подобных команд.

Другой пример – отсутствие в Trigger Editor нормальных циклов и ветвлений. Команды For и if then else позволяют делать лишь одно действие. А если действий нужно сделать много? (на самом деле здесь есть такой прием: указать в качестве действия – запуск определенного триггера, в котором и будет реализованы нужные нам команды). Команда For так неудобна, что мало кто ей пользуется. Она реализует лишь один вид циклов, причем далеко не самый нужный.

И, наконец, третий очень серьезный недостаток Trigger Editor – отсутствие локальных переменных, но об этом более подробно – в следующей статье.

Если вы захотите получить доступ к тем возможностям, которые не реализованы в Trigger Editor вам придется учиться работать в custom text. К счастью в Trigger Editor есть возможность переводить обычные триггеры в custom text (edit>>custom text). Вы сможете изучить, как выглядят простые триггеры в custom text, а затем и изменять их.

Сразу хочу предупредить, что писать что-то свое в custom text – очень тяжело. Ошибетесь в одном символе – вам будет выдан десяток ошибок, причем вы даже не поймете в чем дело. Даже если ошибок не будет, выдано, это еще не значит, что их нет. Некоторые ошибки не обнаруживаются при запуске, но когда при запуске триггера действие доходит до места с ошибкой – все остальные действия после ошибки отсекаются.

Для начинающих хочу дать пару советов по работе с текстовыми триггерами.

1. Сначала напишите триггер обычными средствами, а затем переведите его в custom text и добавьте то, что хотите: циклы, новые команды, локальные переменные.

2. Перед тем, как перевести триггер в custom text – сделайте с него копию.

3. Когда вы переводите триггер в текст вам будет сделано предупреждение, что данное действие необратимо. Чтож, перевести текст в триггеры действительно нельзя, зато можно отменить сделанное действие с помощью edit>>undo или просто нажать ctrl-z.

4. Как можно меньше набирайте сами, чтобы уменьшить вероятность ошибки. Допустим, вы уже сделали тестовый триггер, что-то в нем изменили и захотели добавить какую-нибудь стандартную команду. Создайте новый не текстовый триггер, который будет содержать одну эту команду, переведите его в текст. Вы увидите, как выглядит нужная вам команда. Не набирайте ее вручную! Используйте буфер обмена: выделяете команду, копируете edit>>copy (ctrl-ins), вставляете edit>>paste (shift-ins).

5. Как проверить правильность текстового триггера. Для этого не обязательно каждый раз запускать сценарий на исполнение. Просто выберете тектовый триггер, делаете с него копию и изменитедля нее свойство enabled. Триггер выключится. Если вы попытаетесь его включить, а в триггере есть ошибка – вам будет выдано предупреждение вместе со списком ошибок.

6. Лучше не пытайтесь перевести в текст триггеры со свойством enabled=off или initialy=off. По крайней мере, пока не станете в них разбираться. В противном случае вы создадите текстовый триггер, который не будет работать, даже если вы измените его свойства (enabled, initialy). Чтобы он заработал надо будет удалить определенную команду триггера.

Когда вы преобразуете триггер в текст будут созданы несколько блоков функция (function). Блок с условиями триггера (его название будет оканчиваться на _condition) – идет самым первым. Второй блок (обычно) – блок с действиями (его название будет оканчивается на _action). Последний блок – с событиями (начнется function init_trig_…).

Кроме того, каждая проверка какого-то условия или дополнительное действие (ну например из if then else) приведут к созданию новых блоков (это будет группа функций, которые будут оканчиваться на буквенно-цифровые номера).

При переходе от нормальных триггеров к текстовым меняются названия юнитов, констант, переменных. Вместо конкретных юнитов будет какая-нибудь ерунда ‘df5b’ – что-нибудь в этом роде. Поменяют свои названия спецэффекты: было abilities\orc\… - какой нибудь спецэффект. В тексте придется брать в кавычки и писать не одну черту, а две: “abilities\\orc\\…”.

Список команд текстовых триггеров посылаю в виде файла. Там нет описания действий этих команд – только сами команды и формат их набора. Например, если формат такой: <название команды> (hunit i r)s значит при вводе команды нужно будет ввести название и в скобках перечислить три параметра hunit – читайте как unit, i – integer, r – real, s – string. Если тип s стоит после команды, это означает, что сама команда возвращает параметр типа string, т.е. результатом команды будет определенная строка.

Все это станет более понятным позже, когда вы поработаете с custom text.

Автор: Sergey
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Старый 12.08.2010, 14:39   #2
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Ответ: Текстовые триггеры

Другие статьи:

Основы JASS.
JASS - Общие понятия.
Синтаксис JASS.
JASS - Библиотечные функции. Часть 1.
JASS - Библиотечные функции. Часть 2.
JASS - Операторы.
JASS - Выражения
JASS - Комментарии.
JASS - Функции
JASS - Типы
JASS - Заключение.
Faq по созданию рельефа.
Зачем так много триггеров?
Немного об оптимизации кода.
Текстовые триггеры
Создаем простейшие карты (карты для melee)
Событие с переменным периодом.
Познаем триггеры (Triggers)
Познаем регионы (locations)
Познаем переменные...
Отлавливаем двойной клик мышью.
Массивы и циклы в обычных и текстовых триггерах
Локальные переменные в Custom Text
Камеры, спецэффекты, карта, цвета, кэш...
Добавление своих функций в триггеры
Добавление своих моделей и др. в карту
Делаем очень большую карту...
Делаем огнемет.
Улучшенная версия огнемета...
Глюки worldeditor'a
Random с задаваемой вероятностью - аура.
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 18:27.

Design Developed by CompleteGFX
vBulletin® Version 3.6.7.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot