Сейчас 13:10:07 Четверг, 28 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Создание тригера после загрузки
Создание тригера после загрузки
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
Блокировки:
На хайве был предложен интересный вариант- запускаем таймер, в функцию колбэка пишем функцию с действиями

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NypДата: Среда, 15 Февраля 2012, 17:18:43 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
чтобы загрузка карты шла меньше времени . Я нуб в jass avtortroll

Сообщение отредактировал Nyp - Среда, 15 Февраля 2012, 17:21:59
 

Ty3uKДата: Среда, 15 Февраля 2012, 17:23:13 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Инит не будет идти дольше из-за инициализации триггеров. Только если они гуи (заметил такую тенденцию)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Еще как можно. Но я с телефона, ждем умных людей с компа

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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 )

И тригер обнулять, чтобы память немного освободилась? Буду благодарен за конечные ответы tommy
 

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
Блокировки:
Спасибо=) Спросил бы ещё много, но вопрос решён smiletrollskip
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Создание тригера после загрузки
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz