[Вопрос] Undeclared variable
|
|
Nyp | Дата: Понедельник, 27 Февраля 2012, 22:22:11 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Code function iniAc takes nothing returns nothing set udg_cc_players[13] = "|cFF404040" set udg_cc_players[14] = "|cFFE0E0E0" set udg_cc_players[0] = "|cFF008080" set udg_cc_players[1] = "|cFFFF0000" set udg_cc_players[2] = "|cFF0000FF" set udg_cc_players[3] = "|cFFFFFF00" set udg_cc_players[4] = "|cFF800080" set udg_cc_players[5] = "|cFF00FFFF" set udg_cc_players[6] = "|cFF0080FF" set udg_cc_players[7] = "|cFF00FF00" set udg_cc_players[8] = "|cFFFF00FF" set udg_cc_players[9] = "|cFF808080" set udg_cc_players[10] = "|cFFFFC0C0" set udg_cc_players[11] = "|cFF004000" set udg_cc_players[12] = "|cFF764800" set udg_cc_endtag = "|r" set udg_obciicmerti[1] = 0 set udg_obciicmerti[2] = 0 set udg_team_score[1] = 0 set udg_team_score[2] = 0 endfunction
//=========================================================================== function InitTrig_ini takes nothing returns nothing local trigger trig = CreateTrigger() call TriggerAddAction( trig, function iniAc ) endfunction Народ, вот тригер инициализации, тут присваиваются значение глобалкам, с типом Строка, на код цвета, а целочисленнім - 0. В JNPG при проверке на ошибки, выводит 4 их: Undeclared variable udg_team_score Undeclared variable udg_obciicmerti Undeclared variable udg_cc_endtag Undeclared variable udg_cc_players Необьявленные переменные? Если да, то как их обьявить, это же глобалки?
|
|
|
|
Dreii | Дата: Понедельник, 27 Февраля 2012, 23:01:20 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Nyp, в редакторе глобалок офк лиюо в блоке globals
Добавлено (27 Февраль 2012, 23:01:20) --------------------------------------------- Quote (Nyp) local trigger trig = CreateTrigger() Чем глобальный не устроил? Если локальный делаешь то обнули его
Сообщение отредактировал Dreii - Понедельник, 27 Февраля 2012, 23:01:48 |
|
|
|
Nyp | Дата: Понедельник, 27 Февраля 2012, 23:06:58 | Сообщение # 3 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (Dreii) Чем глобальный не устроил? Если локальный делаешь то обнули его Точно, забыл обнулить Quote (Dreii) в редакторе глобалок офк лиюо в блоке globals Не понял...
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 27 Февраля 2012, 23:35:08 | Сообщение # 4 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Вроде бы в шапке карты:
globals ... endglobals
Сообщение отредактировал oleg_best_oleg - Понедельник, 27 Февраля 2012, 23:35:28 |
|
|
|
Borodach | Дата: Вторник, 28 Февраля 2012, 03:50:28 | Сообщение # 5 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Nyp, Может ты не задал им массив
Karamba
|
|
|
|
Ty3uK | Дата: Вторник, 28 Февраля 2012, 08:03:34 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Он бы тогда написал udg_team_score is not array. А вообще, раздел по жассу создали просто так?
|
|
|
|
SirNikolas | Дата: Вторник, 28 Февраля 2012, 11:41:28 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ty3uK) А вообще, раздел по жассу создали просто так? Наверное, чтоб модераторы перекидывали туда темы.
Жми Ctrl+B, вписывай переменные, но без udg_. А также перенеси все действия в функцию InitTrig_ini. Естественно, никаких триггеров создавать не надо, ни локальных, ни глобальных.
Добавлено (28 Февраль 2012, 11:41:28) --------------------------------------------- Стоп, я понял, в чем ошибка. Ты ведь жал кнопку "Syntax check"? Она проверяет синтаксис только в пределах одного триггера, а глобалки объявляются в самом верху кода. Перемести карту так, чтобы в пути не было русских букв, сохрани. Если не выдаст ошибку, значит, все нормально.
А действия в функцию InitTrig_ все равно надо перенести.
|
|
|
|
Nyp | Дата: Вторник, 28 Февраля 2012, 17:57:54 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (SirNikolas) Жми Ctrl+B, вписывай переменные, но без udg_. Я конвентировал триггер, поэтому переменные вписаны. Quote (SirNikolas) А также перенеси все действия в функцию InitTrig_ini. Естественно, никаких триггеров создавать не надо, ни локальных, ни глобальных. Code function InitTrig_ini takes nothing returns nothing set udg_cc_players[13] = "|cFF404040" set udg_cc_players[14] = "|cFFE0E0E0" set udg_cc_players[0] = "|cFF008080" set udg_cc_players[1] = "|cFFFF0000" set udg_cc_players[2] = "|cFF0000FF" set udg_cc_players[3] = "|cFFFFFF00" set udg_cc_players[4] = "|cFF800080" set udg_cc_players[5] = "|cFF00FFFF" set udg_cc_players[6] = "|cFF0080FF" set udg_cc_players[7] = "|cFF00FF00" set udg_cc_players[8] = "|cFFFF00FF" set udg_cc_players[9] = "|cFF808080" set udg_cc_players[10] = "|cFFFFC0C0" set udg_cc_players[11] = "|cFF004000" set udg_cc_players[12] = "|cFF764800" set udg_cc_endtag = "|r" set udg_obciicmerti[1] = 0 set udg_obciicmerti[2] = 0 set udg_team_score[1] = 0 set udg_team_score[2] = 0 endfunction Так перенести? А почему тригер создавать не надо, или, вопрос наоборот - зачем пишут эту строку, т.е. приравнивают к переменной созданный тригер? Code local trigger trig = CreateTrigger() Далее: да, жал Syntax check. Я переместил карту в папку с путём "D:\Gran" , но всё равно ошибка в синтаксисе.
|
|
|
|
Dreii | Дата: Вторник, 28 Февраля 2012, 20:10:31 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Nyp, Ctrl+b созадешь переменные
потом в триггере init присваеваешь их Code function iniAc takes nothing returns nothing set udg_cc_players[13] = "|cFF404040" set udg_cc_players[14] = "|cFFE0E0E0" set udg_cc_players[0] = "|cFF008080" set udg_cc_players[1] = "|cFFFF0000" set udg_cc_players[2] = "|cFF0000FF" set udg_cc_players[3] = "|cFFFFFF00" set udg_cc_players[4] = "|cFF800080" set udg_cc_players[5] = "|cFF00FFFF" set udg_cc_players[6] = "|cFF0080FF" set udg_cc_players[7] = "|cFF00FF00" set udg_cc_players[8] = "|cFFFF00FF" set udg_cc_players[9] = "|cFF808080" set udg_cc_players[10] = "|cFFFFC0C0" set udg_cc_players[11] = "|cFF004000" set udg_cc_players[12] = "|cFF764800" set udg_cc_endtag = "|r" set udg_obciicmerti[1] = 0 set udg_obciicmerti[2] = 0 set udg_team_score[1] = 0 set udg_team_score[2] = 0 endfunction
//=========================================================================== function InitTrig_ini takes nothing returns nothing set gg_trg_ini = CreateTrigger() //Тут добавляешь событие на срабатывание call TriggerAddAction( ini, function iniAc ) endfunction
Сообщение отредактировал Dreii - Вторник, 28 Февраля 2012, 20:12:03 |
|
|
|
SirNikolas | Дата: Среда, 29 Февраля 2012, 15:17:38 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Dreii) //Тут добавляешь событие на срабатывание Событие на срабатывание - инициализация карты, так что тут есть несколько интересных моментов. Во-первых, после вызова функции InitTrig_ini будет сделан ConditionalTriggerExecute(ggtrg_GlobalTrigger), который ты не используешь => данный инит выполнен не будет. А во-вторых, зачем инициализировать через TriggerExecute, когда можно просто все вписать в одну функцию? Кстати, не забудь снять галочку инита (вверху).Quote (Nyp) да, жал Syntax check. Я переместил карту в папку с путём "D:\Gran" , но всё равно ошибка в синтаксисе. Сохраняешь карту. Если при сохранении не выдаст ошибки, значит, ее нет. Просто кнопка "Syntax check" недоработана. Quote (SirNikolas) Она проверяет синтаксис только в пределах одного триггера, а глобалки объявляются в самом верху кода.
|
|
|
|
Nyp | Дата: Среда, 29 Февраля 2012, 21:36:54 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Насчёт Syntax check понятно, спасибо. Вот только интересно: если эти строки Code local trigger trig = CreateTrigger() Code set gg_trg_ini = CreateTrigger() означают приравнивание тригера к переменной (как, например, set udg_Caster = GetLastCreatedUnit() ), то зачем это вообще делать, если на протяжении игры я не буду к переменной обращаться, или это надо для игры?Quote (Dreii) Чем глобальный не устроил? Если локальный делаешь то обнули его А почему глобальный обнулять не надо?
|
|
|
|
Dreii | Дата: Среда, 29 Февраля 2012, 21:39:25 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Quote (Nyp) А почему глобальный обнулять не надо? Да хз спроси у Николаса
|
|
|
|
llka | Дата: Четверг, 01 Марта 2012, 10:14:10 | Сообщение # 13 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 34
Блокировки:
| А зачем вообще локальный триггер в инициализации? Можно просто написать в ините call ExecuteFunc("") или просто call ФункцияИнита()
|
|
|
|
SirNikolas | Дата: Четверг, 01 Марта 2012, 11:35:38 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Nyp) означают приравнивание тригера к переменной Означают создание триггера и запись ссылки на него в переменную. Чтобы потом в этот триггер добавить условия, события и действия.Quote (Nyp) А почему глобальный обнулять не надо? Потому что он используется в других функциях. Очевидно же.Quote (llka) А зачем вообще локальный триггер в инициализации? Можно просто написать в ините call ExecuteFunc("") или просто call ФункцияИнита() А можно действия поместить в инит, как в посте №8.
|
|
|
|
Nyp | Дата: Четверг, 01 Марта 2012, 20:10:11 | Сообщение # 15 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Всем спс. Самый оптимальный вариант, как мне кажется, остаётся таким: Code function InitTrig_ini takes nothing returns nothing local trigger trig = CreateTrigger() set udg_cc_players[13] = "|cFF404040" set udg_cc_players[14] = "|cFFE0E0E0" set udg_cc_players[0] = "|cFF008080" set udg_cc_players[1] = "|cFFFF0000" set udg_cc_players[2] = "|cFF0000FF" set udg_cc_players[3] = "|cFFFFFF00" set udg_cc_players[4] = "|cFF800080" set udg_cc_players[5] = "|cFF00FFFF" set udg_cc_players[6] = "|cFF0080FF" set udg_cc_players[7] = "|cFF00FF00" set udg_cc_players[8] = "|cFFFF00FF" set udg_cc_players[9] = "|cFF808080" set udg_cc_players[10] = "|cFFFFC0C0" set udg_cc_players[11] = "|cFF004000" set udg_cc_players[12] = "|cFF764800" set udg_cc_endtag = "|r" set udg_obciicmerti[1] = 0 set udg_obciicmerti[2] = 0 set udg_team_score[1] = 0 set udg_team_score[2] = 0 set trig = null endfunction
|
|
|
|
Ty3uK | Дата: Четверг, 01 Марта 2012, 21:47:15 | Сообщение # 16 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Триггер еще можно уничтожить в этом случае. Хотя локальные все равно не вытираются из памяти нормально
|
|
|
|
Nyp | Дата: Четверг, 01 Марта 2012, 22:10:38 | Сообщение # 17 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (Ty3uK) Триггер еще можно уничтожить в этом случае. Хотя локальные все равно не вытираются из памяти нормально Тогда пусть будет так:: Code function InitTrig_ini takes nothing returns nothing set gg_trg_ini = CreateTrigger() set udg_cc_players[13] = "|cFF404040" set udg_cc_players[14] = "|cFFE0E0E0" set udg_cc_players[0] = "|cFF008080" set udg_cc_players[1] = "|cFFFF0000" set udg_cc_players[2] = "|cFF0000FF" set udg_cc_players[3] = "|cFFFFFF00" set udg_cc_players[4] = "|cFF800080" set udg_cc_players[5] = "|cFF00FFFF" set udg_cc_players[6] = "|cFF0080FF" set udg_cc_players[7] = "|cFF00FF00" set udg_cc_players[8] = "|cFFFF00FF" set udg_cc_players[9] = "|cFF808080" set udg_cc_players[10] = "|cFFFFC0C0" set udg_cc_players[11] = "|cFF004000" set udg_cc_players[12] = "|cFF764800" set udg_cc_endtag = "|r" set udg_obciicmerti[1] = 0 set udg_obciicmerti[2] = 0 set udg_team_score[1] = 0 set udg_team_score[2] = 0 call DestroyTrigger(gg_trg_ini) set gg_trg_ini = null endfunction
|
|
|
|
SirNikolas | Дата: Пятница, 02 Марта 2012, 12:28:48 | Сообщение # 18 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Nyp) Самый оптимальный вариант, как мне кажется, остаётся таким: Самый оптимальный вариант - в посте №8. Тебе вообще не нужны здесь триггеры.
|
|
|
|
Nyp | Дата: Пятница, 02 Марта 2012, 16:43:46 | Сообщение # 19 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Значит если не использовать присоединение действий, событий, условий, то можно вообще не записывать тригер в переменную...Ок, сделаю как в посте № 8, спс!
|
|
|
|