Переменная в событии
|
|
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, Больше спасибо!
|
|
|
|