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().
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
            
                                WC3
                            



Когда в фильтре нудно фильтровать юнитов чтобы в группу попали только нужные юниты, а перебирать их ForGroup или циклом.
Замеры лича, которыми он делился на HIVE, говорят, что ForGroup() медленнее перебора цикла.
Нужно сначала обьявить глобалку а потом в спеле юзать вместо локалки, присваивая значение, т.к не будет тратится время на создание и обнуление локалок. Скорость работы что у локалок что у глобалок одинаковая.
PT153: