function GROUP_FILTER takes nothing returns boolean
    local unit f=GetFilterUnit()
    local unit caster=GetTriggerUnit()
    local player p=GetOwningPlayer(caster)
    local unit target=GetSpellTargetUnit()
    if IsUnitAlly(f,p) and GetWidgetLife(f)>0 and f!=target and IsUnitType(f,UNIT_TYPE_STRUCTURE)==false then
        //code
    endif
    set f=null
    set caster=null
    set p=null
    set target=null
    return false
endfunction
Собственно вопрос в том, можно ли так делать, правильно ли варик выбирает юнитов и прочую дичь или все таки нет и лучше использовать глобалки.
Именно вот так. Или все таки первый вариант работает ?
globals
	player PLAYER=Player(0)
	unit TARGET=GetSpellTargetUnit()
endglobals
function GROUP_FILTER takes nothing returns boolean
    local unit f=GetFilterUnit()
    if IsUnitAlly(f,PLAYER) and GetWidgetLife(f)>0 and f!=TARGET and IsUnitType(f,UNIT_TYPE_STRUCTURE)==false then
        //code
    endif
    set f=null
    return false
endfunction

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

Первый вариант должен работать, если фильтр относится к группе.
IsUnitType() == false замени на not IsUnitType().
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
28
5 лет назад
1
Первый вариант должен работать, если фильтр относится к группе.
IsUnitType() == false замени на not IsUnitType().
Принятый ответ
0
32
5 лет назад
0
Нафиг это делать в фильтре?
Когда в фильтре нудно фильтровать юнитов чтобы в группу попали только нужные юниты, а перебирать их ForGroup или циклом.
0
28
5 лет назад
0
Нафиг это делать в фильтре?
А зачем добавлять что-то в группу, чтобы её потом чистить и прочее.
Замеры лича, которыми он делился на HIVE, говорят, что ForGroup() медленнее перебора цикла.

Вместо GetTriggerUnit нужно поставить GetSpellUnit().
0
32
5 лет назад
0
PT153, потому что тебе так или иначе нужна группа, не говоря о случаях когда нужно сохранить юнитов. Разница практически нулевая в скорости, между циклами и фор групом, Get функции наследуют будут работаеть только если вызов фильтра был из функции триггера который сработал на нужное событие, в данном случаи каст скилла.
globals
	player PLAYER=Player(0)
	unit TARGET=GetSpellTargetUnit()
endglobals
Вот это никогда работать небудет, т.к все Get функции такого типа, работают только в потоке триггера который сработал на соответствующие событие, если их вызвать вне потока триггера - они вернут null.
Нужно сначала обьявить глобалку а потом в спеле юзать вместо локалки, присваивая значение, т.к не будет тратится время на создание и обнуление локалок. Скорость работы что у локалок что у глобалок одинаковая.
0
28
5 лет назад
0
потому что тебе так или иначе нужна группа
Мне группы не нужны, потому я всё делаю в фильтре.
PT153:
Вместо GetTriggerUnit нужно поставить GetSpellUnit().
GetSpellEffectUnit()
quq_CCCP:
Вот это никогда работать небудет, т.к все Get функции такого типа, работают только в потоке триггера который сработал на соответствующие событие, если их вызвать вне потока триггера - они вернут null.
Pashka5, вот это совершенно верно.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.