Сейчас 11:15:16 Понедельник, 25 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Переменная в событии
Samedy_Дата: Пятница, 25 Сентября 2015, 21:28:43 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Так нельзя или почему оно не работает и при этом не выдет ошибку? Какая есть альтернатива?
Код
function Trig_hsRevive_Conditions takes nothing returns boolean
     if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'n004' ) ) then
         return false
     endif
     return true
endfunction

function Trig_hsRevive_Actions takes nothing returns nothing
     call RemoveUnit( udg_hs_Shadow )
     call SetUnitOwner( udg_Hero, Player(0), true )
endfunction

//===========================================================================
function InitTrig_hsRevive takes nothing returns nothing
     set gg_trg_hsRevive = CreateTrigger(  )
     call TriggerRegisterUnitInRangeSimple( gg_trg_hsRevive, 256, udg_Hero )
     call TriggerAddCondition( gg_trg_hsRevive, Condition( function Trig_hsRevive_Conditions ) )
     call TriggerAddAction( gg_trg_hsRevive, function Trig_hsRevive_Actions )
endfunction
 

ExtrematorДата: Пятница, 25 Сентября 2015, 22:39:19 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Ну так триггеру регистрируется событие, связанное с юнитом записанным в udg_Hero
что именно работает не так?
 

Samedy_Дата: Пятница, 25 Сентября 2015, 22:59:03 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата Extremator ()
Ну так триггеру регистрируется событие, связанное с юнитом записанным в udg_Hero
что именно работает не так?

Вовсе не работает триггер. Любые действия с этим юнитом проделать можно, а вот именно таким образом не работает.
 

ExtrematorДата: Пятница, 25 Сентября 2015, 23:07:21 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Перед (или после) регистрации события выведи сообщение с именем юнита - проверь записан ли он в переменную в этот момент.
 

Samedy_Дата: Пятница, 25 Сентября 2015, 23:43:36 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата Extremator ()
Перед (или после) регистрации события выведи сообщение с именем юнита - проверь записан ли он в переменную в этот момент.

Проверил несколько раз, даже в новой карте - не работает.
 

ExtrematorДата: Пятница, 25 Сентября 2015, 23:49:51 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Цитата Samedy_ ()
не работает
т.е. функции до/после выдают ссылку на юнита из переменной, а регистрация - этого не делает, так?
кидай пустую карту с тем что ты там набросал... посмотрим


Сообщение отредактировал Extremator - Пятница, 25 Сентября 2015, 23:51:53
 

BorodachДата: Суббота, 26 Сентября 2015, 07:15:15 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
В момент регистрации события переменная равна null. Тебе надо, после присвоения переменной значения сделать действие, добавить событие в триггер.

Karamba
 

Samedy_Дата: Суббота, 26 Сентября 2015, 07:50:09 | Сообщение # 8
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата Borodach ()
В момент регистрации события переменная равна null. Тебе надо, после присвоения переменной значения сделать действие, добавить событие в триггер.

Я совсем не понимаю, почему вы решили, что Hero = null. Ее объявления в другом триггере ДО срабатывания этого не достаточно? Нужно в именно в этом объявить или что?
Цитата Extremator ()
кидай пустую карту с тем что ты там набросал... посмотрим

Я просто установил Hero = юнит на карте при инициализации, а потом создал триггер с этим же кодом. Не работало. А когда попробовал создать еще один триггер с другим событием, используя все ту же глобалку Hero - он работал.
Суть в том, что не работает триггер с конкретно этим событием. Может я чего-то не знаю?
 

BiboДата: Суббота, 26 Сентября 2015, 08:47:32 | Сообщение # 9
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
Цитата Samedy_ ()
Может я чего-то не знаю?

Не знаешь. Не вдаваясь в немногочисленные тонкости - думаю ты заметил, что при создании триггера, автоматически генерируется функция, в которой присваиваются события, условия и действия триггеру, в твоем случае это:
function InitTrig_hsRevive takes nothing returns nothing
Так вот, эти функции (автоматически сгенерированные) выполняются в первую очередь, самыми первыми, даже до того, как происходит срабатывание любого триггера. Можно сказать, что в действительности именно эти функции, являются истинной инициализацией.
Ты присваиваешь переменной udg_Hero значение, в каком-то триггере с событием иниициализации, но в действительности, действия этого триггера выполняются после того, как ты вешаешь на юнита в переменной udg_Hero событие. То есть, на момент выполнения функции InitTrig_hsRevive переменная udg_Hero имеет значение null.


Сообщение отредактировал Bibo - Суббота, 26 Сентября 2015, 12:14:36
 

Samedy_Дата: Суббота, 26 Сентября 2015, 10:42:08 | Сообщение # 10
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Bibo, Больше спасибо!
 

  • Страница 1 из 1
  • 1
Поиск:

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