Есть два примера, один не вызывает утечки, второй вызывает.
1 пример:
Он не вызыввает утечек, хоть там и не стоит call DestroyGroup. Почему?
2 пример:
Вызывает утечки, почему? Как исправить?

Accepted answer

Достаточно посмотреть как устроены эти бж функции и все будет понятно.
function OnlyAliveSourcess takes nothing returns boolean // эту функция в кастом код карты, в самом вверху.
    return GetUnitTypeId( GetFilterUnit( ) ) == 'hsor' and not ( GetWidgetLife( GetFilterUnit( ) ) < 0.405 or IsUnitType( GetFilterUnit( ), UNIT_TYPE_DEAD ) )
endfunction
//...
call GroupClear( udg_Group ) // это в кастом скрипт твоего триггера
call GroupEnumUnitsInRect( udg_Group, bj_mapInitialPlayableArea, Condition( function OnlyAliveSourcess )) // это в кастом скрипт твоего триггера
Вот без утечек и локейшинов и прочих ненужных действий.
Далее уже делай что хочешь с юнитами в группе
`
LOADING AD...

Only a small set of comments around the pointed one shown. Go to actual.
0
2
2 months ago
0
Desgul, спасибо большое за попытку помочь, но к сожалению не помогли Ваши подсказки.
Я и в тот то раз уже все возможные комбинации перепробовал, и в этот раз опять как их только не менял и все точки и все запятые и вместе и тд..всегда ошибка в этой строке при сохранении.
Может кто то её набрать текстом здесь в чате, что бы её можно было скопировать?
И еще, у автора этого поста именно так и стоит в примере...в конце точка, а сразу за ней запятая.

Охренеть...Еще 8 вариаций с точеками, запятыми и пробелами и я нашел нужный )))) Все сохранилось...
Теперь вопрос зачем автор сбивал с толку и выложил скрин где не верно стоят знаки..точка и запятая у него рядом после 99999.
Вот выложу тут рабочий текст строки, думаю кому то может пригодится..
GroupEnumUnitsInRangeOfLoc( udg_Group, udg_Point, 99999, null)
Desgul спасибо Вам что направили мои сомнения что это скрипт вообще рабочий в нужное русло)
0
37
2 months ago
Edited by ScorpioT1000
0
Stray_Lucifer, это формат описания чисел с плавающей точкой
См real
Он не отменяет разделение аргументов запятыми

Разрешается не ставить число до или после точки, тогда это будет считаться как ноль ( .12 эквивалентно 0.12, 12. эквивалентно 12.0 ).
0
28
2 months ago
Edited by PT153
0
EugeAl, если не нужно хранить коллекцию юнитов, можно вообще их даже в саму группу не добавлять. Просто в Enum передавать фильтр с нужными дейтсвиями, а самом фильтре либо возвращать false, либо ничего. Я такой способ уже давно практикую.
0
2
2 months ago
Edited by Stray_Lucifer
0
Кстати знающие люди подскажите пожалуйста, первый способ удаления утечек подаёт к любым триггерам где идёт выделение юнитов через отряд или только в указанном примере это будет работать?
Вот например в таком триггере это будет работать?

ScorpioT1000, Спасибо!
Uploaded files
0
17
2 months ago
0
PT153, Можно, но enum'ить фильтр будет каждый раз всех юнитов, включая дохлых, что лишняя работа )
0
28
2 months ago
Edited by PT153
0
EugeAl, твой вариант тоже будет перебирать всех подряд, только ещё и группу очищать нужно. В моём варианте как раз наоборот нет лишней работы в виде чистки группы. А всё остальное идентично.
Твой вариант через очистку:
call GroupEnumUnitsOfPlayer(TempGroup, Player(0), null)
call ForGroup(TempGroup, function Actions)
call GroupClear(TempGroup)
Мой вариант через фильтр:
call GroupEnumUnitsOfPlayer(TempGroup, Player(0), Filter(function Actions))
В обоих случаях функция действия такая:
function Actions takes nothing returns nothing
    if /* делаем проверки над юнитом */ then
        /* делаем действия над юнитом */
    endif
endfunction

Фильтры в JASS кешируются, поэтому удалять его не нужно. Но я всегда их заношу в глобалки.
1
17
2 months ago
1
PT153, я имел ввиду не такую систему, с очисткой )
Я предлагал иметь группу;
иметь пару триггеров для добавления или удаления каких либо юнитов в или из группы - например, юнитов, нанимаемых в казармах, при смерти юнитов соответственно удалять их из группы;
Действия с юнитами делать через for group;
Не очищать группу после.
Твой же вариант тоже хорош, но он годится для своих абилок аое, например)
Only a small set of comments around the pointed one shown. Go to actual.
To leave a comment please sign in to the site.