Как убрать утечку в этой функции, что только не пробовал делать, все равно при использовании способности каждый раз прибавляется одна утечка. (А стандартно при использовании способности в 1 раз прибавляется 2 утечки, тоже интересно почему?) При этом если установить как последняя созданная группа или необъявленная переменная группы такого не будет. Проверял через функцию HandleCounter. Это баг проверки утечек или так и должно быть? Или нужно через джасс?

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

Вот как должен выглядеть полностью правильный триггер без утечек, единственная утечка создастся только при первом использовании, это я так понял переменная группы, ее обнулять нельзя, иначе скил будет работать только раз.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
6
8 лет назад
Отредактирован Tumart
0
Юниты в радиусе содержит такую функцию создающюю утечку группы
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
Делай как на втором скрине только в CustomScript добавляй вот эту функцию вместо(Юниты в радиусе)
GroupEnumUnitsInRangeOfLoc(group, whichLocation, radius, null)
А лучше используй GroupEnumUnitsInRange юзай не точки а координаты x,y
0
10
8 лет назад
0
Tumart:
Юниты в радиусе содержит такую функцию создающюю утечку группы
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
Делай как на втором скрине только в CustomScript добавляй вот эту функцию вместо(Юниты в радиусе)
GroupEnumUnitsInRangeOfLoc(group, whichLocation, radius, null)
А лучше используй GroupEnumUnitsInRange юзай не точки а координаты x,y
А на гуи можно пожалуйста?
0
6
8 лет назад
Отредактирован Tumart
0
Lotus101, ну гуи только через CustomScript он же JassCode
Личный Сценарий GroupEnumUnitsInRangeOfLoc(udg_Group, udg_Point,200., null)
0
10
8 лет назад
0
Tumart:
Lotus101, ну гуи только через CustomScript он же JassCode
Личный Сценарий GroupEnumUnitsInRangeOfLoc(udg_Group, udg_Point,200., null)
Я так понял надо так: call GroupEnumUnitsInRangeOfLoc(udg_Group, udg_Point, 200, null) Хотя и ваше тоже копировал, просто непонятно почему пробела перед 200 нет и после 200 точка. Все равно также прибавляется одна утечка.
0
6
8 лет назад
0
Lotus101, ты удалил действие Установить Group=Юниты в радиусе?
0
10
8 лет назад
0
Tumart:
Lotus101, ты удалил действие Установить Group=Юниты в радиусе?
Если я его удалю как тогда работать скил будет?
0
6
8 лет назад
Отредактирован Tumart
0
Lotus101, ты уже сделал то же самое через CustomScript сначала установи точку Point удали Установить Group... далее Личный Сценарий call GroupEnumUnitsInRangeOfLoc(udg_Group, udg_Point,200., null)
после все остальное как на 2 скрине
и незабывай обнулять udg_Group=null; udg_Point=null
0
28
8 лет назад
Отредактирован nvc123
0
2 скрин не вызывает утечки
только удалять юнитов из группы не обязательно
0
6
8 лет назад
0
nvc123, создается же локальная группа.
0
28
8 лет назад
0
Tumart, ну так он её удаляет потом же
0
6
8 лет назад
Отредактирован Tumart
0
nvc123, вот в этой функции создается локальная группа и не обнуляется
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
но да ладно HandleCounter считает локации
Значит из за того что не обнулял.
0
10
8 лет назад
0
Tumart:
nvc123, вот в этой функции создается локальная группа и не обнуляется
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
но да ладно HandleCounter считает локации
Значит из за того что не обнулял.
Сделал вот так, действие выбрать юнитов и цикл мне нужно обязательно, все равно прибавляется одна утечка (теперь иногда)
Загруженные файлы
0
6
8 лет назад
0
Lotus101, ни че не понял зачем ты два раза делаешь одно и тоже? выбрал юнитов далее через ForGroup(udg_Croup,function нужная функция) лан в общем лучше делай как на втором скрине там незначительная утечка
0
10
8 лет назад
0
Tumart:
Lotus101, ни че не понял зачем ты два раза делаешь одно и тоже? выбрал юнитов далее через ForGroup(udg_Croup,function нужная функция) лан в общем лучше делай как на втором скрине там незначительная утечка
Все все дошло, спасибо помогло. Поменял последняя группа юнитов на Group больше утечек нет вообще (хотя при первом использовании способности пропдают 2 утечки, потом прибавляется одна а дальше ничего не меняется, странно) Еще вопрос, все эти скрипты обязательно писать надо, может какие-то лишние?
0
6
8 лет назад
Отредактирован Tumart
0
Lotus101, хм ну можно и так ) нет получается лишних нет. А лучше сделал бы как на втором скрине просто убери удалить юнитов из группы и обнули
0
10
8 лет назад
0
Tumart:
Lotus101, хм ну можно и так ) нет получается лишних нет. А лучше сделал бы как на втором скрине просто убери удалить юнитов из группы и обнули
А зачем в скрипте call GroupEnumUnitsInRangeOfLoc(udg_Group, udg_Point,200., null) после Point, нет пробела и после 200 точка это важно?
0
6
8 лет назад
0
Lotus101, да нет. Точка означает что это реальное число пробел вапще ни че не значит
0
10
8 лет назад
0
Вот как должен выглядеть полностью правильный триггер без утечек, единственная утечка создастся только при первом использовании, это я так понял переменная группы, ее обнулять нельзя, иначе скил будет работать только раз.
Загруженные файлы
Принятый ответ
0
20
8 лет назад
0
удаляй группу, а потом используй действие set variable - группа такая-то
Чтобы оставить комментарий, пожалуйста, войдите на сайт.