XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Novikov
Kicked by GadenbIsh
offline
Опыт: 417
Активность:
Передача данных из одного триггера в другой (без глобальных переменных)
Вот у меня такой вопрос. Действие триггера начинается со строчки:
function Trig_MyTrig_Actions takes nothing returns nothing
То есть триггер ничего не берёт и ничего не возвращает. Но что если я хочу запустить триггер MyTrig из другого триггера и при этом передать в него какие-нибудь данные.
Вот, например, у меня есть триггер, который «отлавливает» юнита (по какому-нибудь признаку). А теперь я хочу передать этого юнита в триггер MyTrig. Неужели каждый раз для этого нужно создавать глобальную переменную?
Старый 27.06.2011, 16:28
Voldislav
Solitude
offline
Опыт: 1,051
Активность:
Функция с действиями триггера не может брать какие-то значения. Делай отдельную функцию.
Старый 27.06.2011, 16:43
vladfaust

offline
Опыт: 12,714
Активность:
нет, не обязательно.
» Опасно!
Заноси данные из первого триггера в хеш, старти таймер с указанием 2-го триггера, как ключ указывай ид таймера и уже во 2-м триггере выуживай инфу.
Хэш тебе в помощь
Старый 27.06.2011, 16:50
prog

offline
Опыт: 32,865
Активность:
Head_Hunter_44, а можно еще круче - привязывать по хендлу триггера без всяких дурацких таймеров... Но все это имеет смысл ТОЛЬКО при асинхронном вызове - если используется синхронный вызов то лучше использовать следующее:
  • создаем ОДНУ глобальную переменную типа юнит для всех ситуаций когда будем передавать юнита
  • там откуда передаем сохраняем в локалке текущее значение глобалки
  • записываем в глобалку передаваемое значение
  • синхронно вызываем нужный триггер
  • восстанавливаем прежнее значение глобалки
так реализованы все BJ ф-ции в которых нужна передача данных (в основном работа с группами)
Старый 27.06.2011, 17:30
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Novikov
Вот, например, у меня есть триггер, который «отлавливает» юнита (по какому-нибудь признаку). А теперь я хочу передать этого юнита в триггер MyTrig. Неужели каждый раз для этого нужно создавать глобальную переменную?


Код:
//jass2

function func2 takes unit u returns nothing
    // функция которая обрабатывает переданный юнит.
endfunction

function func1 takes nothing returns nothing
    ...
    call func2(отловленный юнит)
    ...
endfunction

//cjass

void  func2(unit u)
{
    // функция которая обрабатывает переданный юнит.
}

void func1()
{
    ...
    func2(отловленный юнит)
    ...
}


Никаких хешей, глобалок.

Если нужно передать несколько данных, то и пишим у функции что функция берет takes несколько значений.


Код:
//jass2

function funcname takes unit u, unit u2, unit u3, ... , unit uN returns nothing

endfunction

//cjass

void funcname(unit u, unit u2, unit u3, ... , unit uN)

Отмечу что функция может возвращать(return) только 1 значение.
Старый 27.06.2011, 18:54
naxim

offline
Опыт: 10,186
Активность:
Создай takes Unit и когда не нужно ничего передавать - передавай null
Старый 27.06.2011, 22:12
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

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



Часовой пояс GMT +3, время: 17:08.