Немного предыстории, недавно я решил перейти на 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())
что ты здесь собрался обнулять?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.