Мне нужно чтобы одной командай можно было вызвать нужный мне метод
function Vrag takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_TrigerUnitMass[Index])) == true )
endfunction
set udg_Otrat = GetUnitsInRangeOfLocMatching(r, udg_Move1, call Vrag())
как сделать чтоб это работало

function Vrag takes nothing returns boolean
     return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_TrigerUnitMass[Index])) == true )
endfunction

//Действие
//Это boolexpr, поэтому надо через "function название функции" без скобок
//+ не забудь потом очистить и удалить группу перед тем как снова вызовешь GetUnitsInRangeOfLocMatching
set udg_Otrat = GetUnitsInRangeOfLocMatching(r, udg_Move1, function Vrag)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Мануал описывает поведение макросов достаточно понятно. Разъясняя пример в теме другими словами
define MyFunc(type) = {
	nothing MyFunc_##type(type x){
		BJDebugMsg('type')
	}
}
Если препроцессор, обрабатывая код, наткнется на строчку, где вызывается макрос MyFunc, например
// Где-то в CustomScript карты
MyFunc(real)
Он применит указанный выше макрос, заменив в нем слово type на указанное в скобках MyFunc слово real, в результате чего получим код
// MyFunc(real) убрано препроцессором и заменено кодом ниже
nothing MyFunc_real(real x){
	BJDebugMsg("real")
}
Что впоследствии транслируется из cJass в обычный Jass2
function MyFunc_real takes real x returns nothing
	call BJDebugMsg("real")
endfunction
ответ
Нет. Я пока хочу достроить карту на GUI, думаю мне осталось дней 10-30 работать, а буду ли следующую делать - под вопросом. Не хочется тратить время на изучение jass из-за пустяка! Однако Я использовал Custom Script, но это было содрано с одного сайта, а вот чтобы делать самому нужно сначала полностью изучить язык. Либо знаю, либо нет, чуть-чуть не считается!
Что касается wait, то если не это то что тогда?
Опытным путём сам установил что в процесс ничего не вклинивается. Можно использовать Триггер как Функцию и ссылаться на него в другом Триггере. По сути, это и есть функция, если глянуть на jass. Вопрос закрыт.
ответ
Потому что у триггеров нет имен.
Создаем массив строк name_array;
Создаем массив триггеров trigger_array;
Создаем инт name_array_index;
Создаем функцию
register_trigger(Trigger trigger, string name) {
    name_array[name_array_index] = name;
    trigger_array[name_array_index] = trigger;
    name_array_index = name_array_index + 1;
}
Создаем функцию
name_to_trigger(string name) {
    for (integer index = 0; index < name_array_index; index++) {
        if name_array[index] == name {
            return trigger_array[index];
        }
    }
}
Затем регистрируем все триггеры через register_trigger.
А после этого думаем, реально ли у нас столько абилок, что простая последовательность if name == "my_ability" then RunTrigger(my_ability) хуже этого решения
ответ
Имена бж функций есть в..blizzard.j, чтобы они не конфликтовали с вашими способностями - чекайте софтом код абилок и близард ж файл, на предмет одинаковых имен и правьте, а так еще советую тулы векса или хеави лок - они сжимают имена и небудет проблем с именами функций и переменных в скрипте.
ответ
у библиотеки нет методов, у нее обычные функции
если функция public, то вызывать нужно
call LibraryName_MyFunction()
а вообще вопрос, ответ на который есть в базе статей, за такое вообще варнить можно было б

18
Если что то возвращает - значит это функция. Если не возвращает - процедура.
И функцию и процедуру можно вызвать через call название функции (аргументы)
Ну или через ExecuteFunc в качестве аргумента у ExecuteFunc идёт название функции в виде строки
Там где скобки - это аргументы которые идут через запятую, если их нету то просто ()
Возвращаемое функцией можно использовать примерно так:
function compare takes integer first, integer second returns boolean
     //Здесь будут сравниваться целочисленные first и second
     //Вернет true если first будет больше second
     //Вернет false если first будет меньше second
     return (first > second)
endfunction

function my_fync takes nothing returns nothing
     local boolean b = compare(1, 2)
     if( b == true ) then
          call BJDebugMsg("true")
     else
          call BJDebugMsg("false")
     endif
endfunction
14
а Можеш показать не на примере 2 целочисленых а на примере booleana
14
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_TrigerUnitMass[Index])) == true ) вот это например
ну чтоб это укомплектовать код поплатнее
18
function Vrag takes nothing returns boolean
     return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_TrigerUnitMass[Index])) == true )
endfunction

//Действие
//Это boolexpr, поэтому надо через "function название функции" без скобок
//+ не забудь потом очистить и удалить группу перед тем как снова вызовешь GetUnitsInRangeOfLocMatching
set udg_Otrat = GetUnitsInRangeOfLocMatching(r, udg_Move1, function Vrag)
Принятый ответ
14
А это работает За приделами одного тригера
21
Да. При сохранении карты все триггеры сливаются в файл wa3map.j, который добавляется в архив карты. Во время игры выполняется код именно из этого файла. Потому да, работает. Так же стоит понимать что расположение триггера в скрипте карты не зависит от расположения (с верху вниз) в редакторе, а определяется при создании триггера. Потому если, скажем, ты создал триггер #1 и триггер #2, поместил второй выше первого в редакторе, ты все равно не сможешь вызывать в триггере #1 функции с триггера #2.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.