Как должен выглядеть фильтр?
Я пробовал написать типа
функция берет юнита возвращает болен
ретурн (если его хп) == тру
сет юнит = нул
эндфунк
Но оно выбивает ошибку типа "миссинг ретурнс", если в конце стоит "сет юнит = нулл", а обнулять как то надо. Как правильно это написать?

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

Darknessay:
quq_CCCP:
Что за хрень? Фильтр всегда оформляется отдельной функцией, без вашего Г
Функции нужны не ваша строчка а code.
Тип code может быть только function ссылка на кастом функцию объявленную выше в коде.
Я знаю, я об этом и спрашивал, а в скобки условие я вставил уже отчаявшись)
Ну ты jass API то хоть смотрел?
Функция Condition() просит тип "code" и примет только "code".
цитата
globals
unit bj_lastFilterUnit = null
boolexpr OnlyEnemyOrgAlive = null
endglobals

function OnlyEnemyOrganicAlive_Filter takes nothing returns boolean
	set  bj_lastFilterUnit = GetFilterUnit()
	return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) 
endfunction

// При инициализации
***
set OnlyEnemyOrgAlive = Condition( function OnlyEnemyOrganicAlive_Filter )
***
// При переборе
set bj_groupEnumOwningPlayer = GetOwningPlayer( GetSpellAbilityUnit() ) // любой нужный тебе игрок, чтобы определи кто ему враг.
call GroupEnumUnitsInRange(g,X,Y,100, OnlyEnemyOrgAlive) //х и у - координаты
call ForGroup( g, function A ) // фунция A твоя функция где ты будешь совершать действия с юнитами в группе, передавать туда значения можно глобалками.
Москиты ни поподают в группу, GroupEnumUnitsInRange и прочее не пикает москитов, вообще никак... Москиты не взаимодействуют со скиллами и прочим, на них реагируют только события входа\выхода в зону или к юниту, а так же при переборе всех юнитов игрока GroupEnumUnitsOfPlayer, все остальное что ищет юнитов на москитов не реагирует...
0
17
7 лет назад
Отредактирован ledoed
0
GetFilterunit должен выглятеть так GetFilterUnit(),и ещё твоя функция ничего не принимает и не выдаёт, ещё ты ищешь юнитов вокруг юнита(d)=null
и поподробней что ты хочешь найти юнитов вокруг когото или просто проверить жив ли он
0
19
7 лет назад
0
ledoed:
GetFilterunit должен выглятеть так GetFilterUnit(),и ещё твоя функция ничего не принимает и не выдаёт, ещё ты ищешь юнитов вокруг юнита(d)=null
и поподробней что ты хочешь найти юнитов вокруг когото или просто проверить жив ли он
мне нужен фильтр, при котором группа будет выбирать лишь юнитов
А про скобочки() я конечно забыл нормально
ledoed:
GetFilterunit должен выглятеть так GetFilterUnit(),и ещё твоя функция ничего не принимает и не выдаёт, ещё ты ищешь юнитов вокруг юнита(d)=null
и поподробней что ты хочешь найти юнитов вокруг когото или просто проверить жив ли он
Эта функция и не должна ничего делать, я ее просто написал чтоб вставить туда группу. Я про фильтр спрашивал, который в кондишенах строки группы должен быть вместо строчки с условием
0
17
7 лет назад
Отредактирован ledoed
0
ну тода так
bool main(){
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0)
}

void lalaal(){
GroupEnumUnitsInRange(g,x,y,rad,function main)
}
2
32
7 лет назад
2
Что за хрень? Фильтр всегда оформляется отдельной функцией, без вашего Г
Функции нужны не ваша строчка а code.
Тип code может быть только function ссылка на кастом функцию объявленную выше в коде.
0
19
7 лет назад
0
quq_CCCP:
Что за хрень? Фильтр всегда оформляется отдельной функцией, без вашего Г
Функции нужны не ваша строчка а code.
Тип code может быть только function ссылка на кастом функцию объявленную выше в коде.
Я знаю, я об этом и спрашивал, а в скобки условие я вставил уже отчаявшись)
0
32
7 лет назад
Отредактирован Raised
0
Darknessay:
quq_CCCP:
Что за хрень? Фильтр всегда оформляется отдельной функцией, без вашего Г
Функции нужны не ваша строчка а code.
Тип code может быть только function ссылка на кастом функцию объявленную выше в коде.
Я знаю, я об этом и спрашивал, а в скобки условие я вставил уже отчаявшись)
Ну ты jass API то хоть смотрел?
Функция Condition() просит тип "code" и примет только "code".
цитата
globals
unit bj_lastFilterUnit = null
boolexpr OnlyEnemyOrgAlive = null
endglobals

function OnlyEnemyOrganicAlive_Filter takes nothing returns boolean
	set  bj_lastFilterUnit = GetFilterUnit()
	return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) 
endfunction

// При инициализации
***
set OnlyEnemyOrgAlive = Condition( function OnlyEnemyOrganicAlive_Filter )
***
// При переборе
set bj_groupEnumOwningPlayer = GetOwningPlayer( GetSpellAbilityUnit() ) // любой нужный тебе игрок, чтобы определи кто ему враг.
call GroupEnumUnitsInRange(g,X,Y,100, OnlyEnemyOrgAlive) //х и у - координаты
call ForGroup( g, function A ) // фунция A твоя функция где ты будешь совершать действия с юнитами в группе, передавать туда значения можно глобалками.
Москиты ни поподают в группу, GroupEnumUnitsInRange и прочее не пикает москитов, вообще никак... Москиты не взаимодействуют со скиллами и прочим, на них реагируют только события входа\выхода в зону или к юниту, а так же при переборе всех юнитов игрока GroupEnumUnitsOfPlayer, все остальное что ищет юнитов на москитов не реагирует...
2 пункта от GF RaiseD: 2.2 (троллинг) Добрее быть надо
Принятый ответ
5 комментариев удалено
0
15
7 лет назад
0
Прежде чем задавать вопрос - ctrl+жмяк лкм (вроде так) на функцию и смотришь какие типы аргументов нужны ей. Это ведь не сложно.
GroupEnumUnitsInRange(group, x, y, range, function f)
Если хочется написать прям тута - используй вот так
GroupEnumUnitsInRange(group, x, y, range, \
lambda bool (){
return тута твои условия
})
2
32
7 лет назад
2
Hate, EnergyFrost, да не беспокойтесь, 2 недели назад он спрашивал тоже самое, ему дали ответ а он забыл и решил спросить снова...
4 комментария удалено
Чтобы оставить комментарий, пожалуйста, войдите на сайт.