[Вопрос] Глобальные переменные
|
|
Bibo | Дата: Воскресенье, 01 Января 2012, 14:45:57 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| как и где объявлять глобальные переменные без уродской приставки udg_?
|
|
|
|
Hexing | Дата: Воскресенье, 01 Января 2012, 15:15:07 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| требуется vJass в коде, в блоке globals example: Code globals unit GLOBAL_UNIT = null timer GLOBAL_TIMER = CreateTimer() endglobals
function someFunc takes nothing returns nothing call DestroyTimer(GLOBAL_TIMER) if not GLOBAL_UNIT == null then call RemoveUnit(GLOBAL_UNIT) //GLOBAL_UNIT = null // - нет смысла ибо глобалка, также с таймером endif endfunction
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 16:32:36 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Hexing) в блоке globals globals type name endglobals Лучше всего делать это в нестандартном коде карты, или уже в триггерах но распологатся должен блок всегда выше всех функций.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 01 Января 2012, 16:46:16 |
|
|
|
Diabfall | Дата: Воскресенье, 01 Января 2012, 16:32:40 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Можно просто открыть кастом код карты и там в самом верху добавить: Code unit GLOBAL_UNIT = null timer GLOBAL_TIMER = CreateTimer()
|
|
|
|
Bibo | Дата: Воскресенье, 01 Января 2012, 16:39:39 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Спасибо!
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 16:48:21 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Hexing) unit GLOBAL_UNIT = null А разве при создании переменной они не принимают значение ноль? Подозрительный ты Кекс.Добавлено (01 Январь 2012, 16:48:21) ---------------------------------------------
Quote (Hexing) требуется vJass скорей просто ЖНПГ, а то он еще в нете будет искать где скачать вжасс.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 01 Января 2012, 16:47:35 |
|
|
|
Bibo | Дата: Воскресенье, 01 Января 2012, 17:31:08 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Quote (lawson) скорей просто ЖНПГ, а то он еще в нете будет искать где скачать вжасс. я конечно нуб, но первое что сделал скачал jngp Quote (lawson) globals type name endglobals Использую, карта не грузится
|
|
|
|
Hexing | Дата: Воскресенье, 01 Января 2012, 17:37:06 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Bibo) Использую, карта не грузится не слушай этого гуишника, он как скажет, и не подумает что другие понять не могут globals //тут твои переменные /*тип, к примеру юнит*/unit /*название переменной, скажем Variable*/ Variable endglobals
....
дальше можно обращаться к юниту Variable, без udg_Quote (lawson) А разве при создании переменной они не принимают значение ноль? Подозрительный ты Кекс. нет не принимает, хотя мб вжасс это мутит ибо глобалки, но для уверенности...Quote (lawson) Quote (Hexing) где не мои слова, не хорошо лавсон!
Quote (Diabfall) Можно просто открыть кастом код карты и там в самом верху добавить: Code unit GLOBAL_UNIT = null timer GLOBAL_TIMER = CreateTimer() это уже cjass, не пудри новичкам мозги
|
|
|
|
Bibo | Дата: Воскресенье, 01 Января 2012, 17:41:51 | Сообщение # 9 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Hexing, спасибо большое! понятно и без пафоса
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 17:54:39 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Bibo) понятно и без пафоса Hexing, хехехех
Добавлено (01 Январь 2012, 17:49:45) --------------------------------------------- Quote (Hexing) нет не принимает А ты проверь, мож че нового узнаешь.
Добавлено (01 Январь 2012, 17:54:39) --------------------------------------------- Quote (Bibo) я конечно нуб, но первое что сделал скачал jngp Не обижайся, просто за долгое прибывание здесь и не такие вопросы нам задавали.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 01 Января 2012, 17:55:32 |
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 18:34:50 | Сообщение # 11 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (lawson) А разве при создании переменной они не принимают значение ноль? Не принимают. Я, вроде, об этом тебе уже писал.Quote (Bibo) Использую, карта не грузится При использовании v/cJASS необходимо перед запуском сохранять карту. И в пути не должно быть русских букв.Quote (Diabfall) Можно просто открыть кастом код карты и там в самом верху добавить: Извращение.
|
|
|
|
Hexing | Дата: Воскресенье, 01 Января 2012, 18:37:58 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) Извращение. неужели ты на cjass пишешь globals?
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 18:47:09 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Hexing, перечитай еще раз пост Diabfall. Он предлагает открывать карту MPQ-архиватором и менять код вручную. Добавлено (01 Январь 2012, 18:47:09) --------------------------------------------- А globals я не пишу.
|
|
|
|
Ty3uK | Дата: Воскресенье, 01 Января 2012, 18:53:20 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Он предлагает открыть шапку карты и вписать глобалки в начале кода, не более
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 18:55:48 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ty3uK, и верно. Тогда другой вопрос: зачем было это писать, если данный вариант уже был предложен, так что люди ищут другой смысл? К тому же, надо было написать про то, что требуется Эдик.
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 18:58:19 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Не принимают. Я, вроде, об этом тебе уже писал. Хмм, тогда извиняюсь Кекс. И что же принимает переменная при создании? Ведь если написать так local unit u if (u == null) then trace("null") то выведет null. Или я чета не так понял?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 19:01:03 | Сообщение # 17 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (lawson) local unit u if (u == null) then trace("null") Серьезно? Сейчас проверю.
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 19:10:28 | Сообщение # 18 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Серьезно? Это был сарказм? Или я действительно ниче не знаю?Добавлено (01 Январь 2012, 19:10:28) --------------------------------------------- Я вроде уже такое делал, у меня в ИИ создавался лок триггер на регистрацию атаки, если триг сработал я его удаляю, но если я регистрировал триггер и не удалял его потом он мне срабатывал в условиях где этого не должно происходить и я решил проблему простым условием что триггер уже создан и тогда не создавать его еще раз, или он равен нулю и тогда его создать, при тестировании все работало как было задуммано и я решил что при создании переменной(не присваивая ей значения) он имеет значение ноль. Хмм
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 19:16:41 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Проверил. После данной проверки (u == null) никакие действия не выполняются. Отсюда можно заключить, что в программном представлении JASS'овских переменных есть буль, отвечающий за то, установлено ли значение.
Добавлено (01 Январь 2012, 19:15:45) --------------------------------------------- Quote (lawson) И что же принимает переменная при создании? "Информационный мусор". При запуске следующей программы может быть выведено абсолютно любое число.Code #include <stdio.h>
int main() { int i; printf("%d", i); getchar(); }
Добавлено (01 Январь 2012, 19:16:41) --------------------------------------------- При выделении памяти под переменную она (память) не заполняется нулями. Имеются в виду языки JASS, C и C++ (на котором и был написан JASS).
Сообщение отредактировал SirNikolas - Воскресенье, 01 Января 2012, 19:17:12 |
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 19:18:21 | Сообщение # 20 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| SirNikolas,все теперь понятно.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 01 Января 2012, 19:23:27 |
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 19:23:29 | Сообщение # 21 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Я не это имел в виду. Когда ты запрашиваешь память под переменную (когда исполнение кода доходит до инструкции "local"), тебе память предоставляется со всем, что в ней было раньше. А быть там могло что угодно. Когда ты пишешь в переменную 0, в нее просто пишется 0. Вернее, последовательность битов, обозначающая ноль.
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 19:25:16 | Сообщение # 22 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Когда ты пишешь в переменную 0, в нее просто пишется 0. Вернее, последовательность битов, обозначающая ноль. Это я знаю, просиходит когда записываем туда какое либо значение. ДА все я понял, хотя как тогда я могу проверять равен ли триггер нулю(тоесть было ли действие CreateTrigger) или нет?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 19:27:18 | Сообщение # 23 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Изначально присвоить переменной значение null.
|
|
|
|
lawson | Дата: Воскресенье, 01 Января 2012, 19:30:39 | Сообщение # 24 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Изначально присвоить переменной значение null. Чисто теория: так значит ноль это тоже значение а не "ссылка на пустоту". И что происходит с лок перменной в памяти после всех действий в триггере, когда ей уже присваивается значение ноль?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Воскресенье, 01 Января 2012, 19:36:54 | Сообщение # 25 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (lawson) Чисто теория: так значит ноль это тоже значение, а не "ссылка на пустоту". А почему значение не может быть ссылкой на что-л., в т. ч. и на пустоту?) Более точно, не на пустоту, а на ячейку опер. памяти под номером 0. Да, знаю, работа с указателями - это вынос мозга (по крайней мере на C). В это долго надо вникать.Quote (lawson) И что происходит с лок перменной в памяти после всех действий в триггере, когда ей уже присваивается значение ноль? Для точного ответа на этот вопрос необходимо знать исходный код war3. Вот как мне кажется. Идет проверка: если переменная не наследуется от handle или равна null, то из-под нее высвобождается память.
|
|
|
|