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

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

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

Событие с переменным периодом.



Этот пример не является чем-то особым, но очень хорошо показывает возможности JASS. Всем известно, что редактор триггеров позволяет создавать триггеры с периодическим игровым событием, длительность которого постоянна и не может быть изменена. Кроме того, нельзя использовать real-переменную в качестве интервала. В этом примере мы докажем обратное. В игре достаточно набрать Txx, где xx - период в секундах и надпись начнет появляться каждые xx секунд. Конечно, вместо надписи может быть что угодно - это всего лишь пример. Самое интересное, что такое событие полностью управляется переменной - в игре указывается новое значение и период автоматически меняется, причем период может поменять любой человек с помощью обычного редактора триггеров не используя текстовые!
Сначала рассмотрим алгоритм: В функции регистрации события МОЖНО использовать real - переменные, но редактор это не дает сделать. Используем два триггера - один будет отвечать за периодическое событие, другой - за изменение периода. Период задается числом real, а изменение real, как известно, можно отслеживать при помощи специального события - Value of real variable. При каждом изменении мы будем уничтожать старый периодический триггер вместе с контрольным и создавать их заново с новыми параметрами.
В примере используется одна глобальная переменная + три триггера. Можно обойтись и двумя, но это сделано для простоты понимания.

(udg) TimeControl - Переменная real, в которой хранится значение периода.
(gg_) TimeControl - триггер, отслеживающий изменение переменной.
(gg_) TimedEvent - Триггер, отвечающий за периодическое событие.
(gg_) CTime - Лишний триггер, служит контейнером для функций двух предыдущих.

// ------------------ Начало скрипта -------------------------

function Trig_TimedEvent_Actions takes nothing returns nothing
// Эта функция служит только для запуска не текстового
// триггера PeriodicEvent, в котором находятся действия
// пользователя.
call TriggerExecute(gg_trg_PeriodicEvent)
// Вызываем указанный триггер.
endfunction

function TValue_Update takes nothing returns nothing
// Эта функция уничтожает старые триггеры и заново
// создает их с новыми параметрами.
call DestroyTrigger(gg_trg_TimedEvent)
// Уничтожаем триггер, отвечающий за периодическое событие.
call DestroyTrigger(GetTriggeringTrigger())
// Уничтожаем выполняющийся триггер - контрольный.
set gg_trg_TimeControl = CreateTrigger()
// Заново создаем контрольный триггер.
call TriggerRegisterVariableEvent(gg_trg_TimeControl, "udg_TimeControl", NOT_EQUAL, udg_TimeControl)
// Регистрируем для него событие - значение переменной
// TimeControl не равно ее текущему значению. Так
// мы будем отлавливать изменения этой переменной.
call TriggerAddAction(gg_trg_TimeControl, function TValue_Update)
// Добавляем контрольному триггеру эту же функцию
// в качестве действия.
set gg_trg_TimedEvent = CreateTrigger()
// Аналогично и с другим триггером.
call TriggerRegisterTimerEventPeriodic(gg_trg_TimedEven
t, udg_TimeControl)
// Регистрируем периодическое игровое событие с
// периодом, равным новому значению TimeControl.
call TriggerAddAction(gg_trg_TimedEvent, function Trig_TimedEvent_Actions)
// Добавляем действия - вызов пользовательского триггера.
endfunction

function InitTrig_CTime takes nothing returns nothing
// А это функция инициализации. Всего лишь запускает
// функцию обновления параметров, которая и
// зарегистрирует оба триггера.
call TValue_Update()
// Запускаем функцию обновления.
endfunction

// ------------------ Конец скрипта ------------------------

Вот такой простой пример. Если что непонятно - см. статьи "Оптимизация" и "Зачем так много триггеров?". Тогда будет ясно, зачем в карте нужны два пустых триггера. Опять же, можно было один триггер не использовать, но думаю, было бы труднее понять алгоритм.

Автор: Caсоdemon
© 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, время: 02:30.

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