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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Глобальные переменные
[Вопрос] Глобальные переменные
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 (Bibo)
как

Quote (Hexing)
в блоке globals

globals
type name
endglobals
Quote (Hexing)
где
Лучше всего делать это в нестандартном коде карты, или уже в триггерах но распологатся должен блок всегда выше всех функций.


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
Блокировки:
Он предлагает открыть шапку карты и вписать глобалки в начале кода, не более

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

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, то из-под нее высвобождается память.


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Глобальные переменные
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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