Немного предыстории, недавно я решил перейти на JASS окончательно и бесповоротно, потому что когда начинаешь делать красивую анимацию на триггерах и даммиках, образуется такая течь, что играть становится невозможно
Итак, пара вопросов по JASS:
  1. Передача аргументов в функции идет по ссылке или по значению?
  2. Если по значению, то как передать по ссылке?
  3. Если локальная переменная возвращается из функции, то как ее обнулять (допустим возвращается тип unit)?
  4. Есть ли возможность передачи шаблонных аргументов в функцию?
  5. Не нашел информации по работе с массивами на JASS (только на cJass, Zinс), ссылочку пожалуйста. Интересует объявление\определение\ обращение\передача в функцию (по ссылке).
  6. Есть ли возможность "typedef"? "class"? массив ссылок?
  1. Документация, которая могла бы объяснить что делают некоторые нативки (на английском тоже нормально), пока приходится писать на гуи код, потом ковертировать, а потом искать аналоги нативок для BJ функций. (Двойная работа) Возможно есть способ не писать код дважды?
P.S. Честно все искал, но вот эти вопросы остались по-прежнему незакрыты. Спасибо за внимание.

Принятый ответ

всегда по ссылке для handle-типов, всегда по значению для остальных
изменить это невозможно
никак, использовать глобалку, куда сохранять локалку перед нулением
нет, нету
ну или аналоги всего этого есть в продвинутых редакторах, не знаю, пусть те, кто ими пользуются, скажут
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
16
5 лет назад
2
всегда по ссылке для handle-типов, всегда по значению для остальных
изменить это невозможно
никак, использовать глобалку, куда сохранять локалку перед нулением
нет, нету
ну или аналоги всего этого есть в продвинутых редакторах, не знаю, пусть те, кто ими пользуются, скажут
Принятый ответ
0
26
5 лет назад
0
Если локальная переменная возвращается из функции, то как ее обнулять (допустим возвращается тип unit)?
никак, и не нужно
Не нашел информации по работе с массивами на JASS (только на cJass, Zing), ссылочку пожалуйста. Интересует объявление\определение\ обращение\передача в функцию (по ссылке).
тебе достаточно дописать
real array some_numbers[5]
что уже объявит массив размером 5
на vjass можно делать двойной массив, что уменьшит максимальное число ячеек в массиве (изначально около ~8100 на 1.26а)
real array some_numbers[5][5]
если используешь cjass можно просто писать
real some_numbers[5]

примерный аналог классов это структуры (struct) из vjass, их вроде хотели добавить нативно в последних версиях варкрафта
Документация, которая могла бы объяснить что делают некоторые нативки (на английском тоже нормально), пока приходится писать на гуи код, потом ковертировать, а потом искать аналоги нативок для BJ функций. (Двойная работа) Возможно есть способ не писать код дважды?
например? многие функции говорят сами за себя, тем более что в редакторе есть список всех функций и констант, плюс можно раскрывать содержимое бж функций зажав ctrl и кликнув по ней
0
17
5 лет назад
Отредактирован GetLocalPlayer
0
никак, и не нужно
Нужно.
Hate:
что уже объявит массив размером 5
В Jass размерность массива не задается, этого нет в его синтаксисе. Используется в vJass и Zinc и только для объяления типа-массива или двумерного массива. То есть запись
real array some_numbers[5]
будет переварена парсером но сама по себе не имеет смысла.
0
32
5 лет назад
0
Нативок очень много, прям вам каждая непонятна?
0
33
5 лет назад
0
их вроде хотели добавить нативно в последних версиях варкрафта
вроде ещё не добавили
0
8
5 лет назад
Отредактирован pAxsIs
0
Итак объединю все ответы:
  1. Передача происходит по ссылке
  2. см. в п.1.
  3. Обнулять можно только до возвращения, а возвращать лучше через глобальную переменную
  4. Такой возможности - нет
  5. В обычном JASS объявление:
	local real array nameArray
Определение не требуется, поэтому Обращение:
	set nameArray[0] = 1.0
Передача в функцию просто по имени? Происходит передача по ссылке для Handle, остальные по значению.
  1. Возможно есть структуры в vJASS (структура по сути от класса ничем не отличается, кроме public -> private).
  2. Вот пример, который я не смог понять, для меня это не самоговорящее название:
	call AnyUnitEvent( gg_trg_TrigName, EVENT_PLAYER_HERO_SKILL )
Могу кучу версий подобрать что будет означать этот ивент. Поэтому некоторые нативки довольно непонятны.

Еще один доп вопрос: Разве vJASS и JASS не одно и тоже? Раньше когда читал так и думал.
Правильно все ответы разобрал?
0
26
5 лет назад
0
Нужно.
KillUnit(GetTriggerUnit())
что ты здесь собрался обнулять?
0
8
5 лет назад
Отредактирован pAxsIs
0
Hate:
Нужно.
KillUnit(GetTriggerUnit())
что ты здесь собрался обнулять?
Я говорил про такой пример:
function foo takes nothing returns string
	local string s = "This is a string"
	
	return s
endfunction
Вместо string можно любой другой тип данных подставить для примера
2
21
5 лет назад
Отредактирован Raised
2
Нативки возвращают ссылку на handle, причастный к ивенту. Переменные типа handle просто хранят ссылку на объект, ну и сами хранятся в памяти.
В случае с глобальными переменными в обнулении нет особого смысла ибо значение переменной просто перезаписывается, но с локальными переменными, наследующими тип handle все не так радужно ибо вопреки ожиданиям, выделенная под них память не очищается после выполнения функции, потому их нужно обнулять вручную.
Глобалки же можно (и нужно?) использовать в качестве эдакого контейнера для хранения-передачи значений, обрабатываемых за одну итерацию.
3.Если локальная переменная возвращается из функции, то как ее обнулять
Функция возвращает не переменную, а ссылку на игровой объект. А эта ссылка записывается в переменную. Проверь. Обнуление переменной ведь не удаляет юнита. Но сама переменная (ссылка) тоже занимает место в памяти.
обнулять так:
     set var = null
Возможно есть способ не писать код дважды?
JassHelper? Встроен в последние сборки нестандартных редакторов как наших, так и с Hive.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.