Создание тригера после загрузки
|
|
Nyp | Дата: Среда, 15 Февраля 2012, 16:08:39 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Code //=========================================================================== function InitTrig_nenapadeni takes nothing returns nothing set gg_trg_nenapadeni = CreateTrigger() Народ, как можно создать тригер не во время инициализации, а после? Это связано с "продолжается инициализцаия карты" выше комментария к триггеру?
|
|
|
|
SirNikolas | Дата: Среда, 15 Февраля 2012, 17:11:57 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Просто берешь и создаешь. Но лучше никогда не пользоваться динамическими триггерами - их невозможно полностью вытереть из памяти. Практически всегда существует альтернатива. Зачем тебе он нужен?
|
|
|
|
Ty3uK | Дата: Среда, 15 Февраля 2012, 17:13:54 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| На хайве был предложен интересный вариант- запускаем таймер, в функцию колбэка пишем функцию с действиями
|
|
|
|
Nyp | Дата: Среда, 15 Февраля 2012, 17:18:43 | Сообщение # 4 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| чтобы загрузка карты шла меньше времени . Я нуб в jass
Сообщение отредактировал Nyp - Среда, 15 Февраля 2012, 17:21:59 |
|
|
|
Ty3uK | Дата: Среда, 15 Февраля 2012, 17:23:13 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Инит не будет идти дольше из-за инициализации триггеров. Только если они гуи (заметил такую тенденцию)
|
|
|
|
Nyp | Дата: Среда, 15 Февраля 2012, 17:28:10 | Сообщение # 6 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Code function Trig_nenapadeniCon takes nothing returns boolean if ( not ( IsUnitAlly(GetAttackedUnitBJ(), GetOwningPlayer(GetAttacker())) == true ) ) then return false endif return true endfunction function Trig_nenapadeniAc takes nothing returns nothing call IssueImmediateOrder( GetAttacker(), "stop" ) endfunction //=========================================================================== function InitTrig_nenapadeni takes nothing returns nothing set gg_trg_nenapadeni = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( gg_trg_nenapadeni, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddCondition( gg_trg_nenapadeni, Condition( function Trig_nenapadeniCon ) ) call TriggerAddAction( gg_trg_nenapadeni, function Trig_nenapadeniAc ) endfunction Как можно ещё оптимизировать триг, или это уже макс? Или стоит новую тему создать?
|
|
|
|
Ty3uK | Дата: Среда, 15 Февраля 2012, 17:34:07 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Еще как можно. Но я с телефона, ждем умных людей с компа
|
|
|
|
SirNikolas | Дата: Среда, 15 Февраля 2012, 18:09:33 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code function Trig_nenapadeni_Conditions takes nothing returns boolean return IsUnitAlly(GetTriggerUnit(), GetOwningPlayer(GetAttacker())) endfunction
function Trig_nenapadeni_Actions takes nothing returns nothing call IssueImmediateOrderById(GetAttacker(), 851972)//stop endfunction
//=========================================================================== function InitTrig_nenapadeni takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null) exitwhen i == 11 set i = i + 1 endloop call TriggerAddCondition(trig, Condition(function Trig_nenapadeni_Conditions)) call TriggerAddAction(trig, function Trig_nenapadeni_Actions) set trig = null endfunction Если ты хочешь ускорить загрузку перенесением инитов на время игры, ты получишь лаги при старте. Выбирай, что лучше.
|
|
|
|
Impregnable | Дата: Среда, 15 Февраля 2012, 19:01:25 | Сообщение # 9 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (SirNikolas) ...Но лучше никогда не пользоваться динамическими триггерами - их невозможно полностью вытереть из памяти...
А можно поподробнее. Главное объясни как узнал, что невозможно выгрузить. И еще, неужели это может стать причиной лагов или еще чего-то?
|
|
|
|
SirNikolas | Дата: Среда, 15 Февраля 2012, 19:19:26 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Это не я узнал, это FkoFF. Вот. Понятно, что если процесс будет требовать все больше и больше памяти, когда-нибудь Windows его принудительно завершит.
|
|
|
|
Nyp | Дата: Среда, 15 Февраля 2012, 19:40:25 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Code loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null) exitwhen i == 11 set i = i + 1 endloop А цикл это вместо события? Если да, то чем оно лучше этого: Code call TriggerRegisterAnyUnitEventBJ( gg_trg_nenapadeni, EVENT_PLAYER_UNIT_ATTACKED ) И тригер обнулять, чтобы память немного освободилась? Буду благодарен за конечные ответы
|
|
|
|
SirNikolas | Дата: Среда, 15 Февраля 2012, 19:44:22 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| В BJ добавляется событие для всех 16 игроков, а надо только для 12. Плюс там используется цикл с постусловием и константа, но это уже мелочи.Quote (Nyp) И тригер обнулять, чтобы память немного освободилась? Ну да, байтов 30, если верить xgm'щикам.
|
|
|
|
Nyp | Дата: Среда, 15 Февраля 2012, 19:48:46 | Сообщение # 13 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Спасибо=) Спросил бы ещё много, но вопрос решён
|
|
|
|