Добавлен KaneThaumaturge
Есть два примера, один не вызывает утечки, второй вызывает.
1 пример:
1 пример:
Он не вызыввает утечек, хоть там и не стоит call DestroyGroup. Почему?
2 пример:
2 пример:
Вызывает утечки, почему? Как исправить?
Принятый ответ
Достаточно посмотреть как устроены эти бж функции и все будет понятно.
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 )) // это в кастом скрипт твоего триггера
Вот без утечек и локейшинов и прочих ненужных действий.
Далее уже делай что хочешь с юнитами в группе
Далее уже делай что хочешь с юнитами в группе
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
создавай группу через отдельную переменную-точку
потом удаляй
Тоесть можно юзать второй вариант, и сильных утечек не будет?
ну лучше через координаты делать, если триггер каждый сек работать будет
Отредактирован quq_CCCP
Далее уже делай что хочешь с юнитами в группе
Спасибо больше, функцию OnlyAliveSourcess вставить в вверх. А триггер сделать таким:
quq_CCCP:
Да, я так понял функция фильтрует только волшебниц, но я сделал их для примера просто.
call GroupEnumUnitsInRect( udg_Group, bj_mapInitialPlayableArea, null) Нельзя использовать ли это? А в условие ставить уже в цикле?
Ну то что после == это есть ро код юнита, смотри в редакторе объектов нажав Ctr + D
Да, я увидел, но я же не ограничиваюсь только этим услвоием, у меня куча триггеров с пиком, и все они вызывают утечки, и у всех разные условия. Исправляю мапу свою
call GroupEnumUnitsInRect( udg_Group, bj_mapInitialPlayableArea, null) Нельзя использовать ли это? А в условие ставить уже в цикле?
Вам я так понял координаты не даются...
KaneThaumaturge, не надо, это помедленнее в разы + пикать всех, включая дохлых плохая затея - могут быть баги.
Для этого делаются фильтры на все случаи жизни, штук 10, и используются во всех триггерах.
Хорошо, тогда с ними разберусь уже как-то. Спасибо
Отредактирован quq_CCCP
Придеться немного поизучать jass
Пишет отсутствует оператор кода, хотя все как в примере
Отредактирован Borodach
Я и в тот то раз уже все возможные комбинации перепробовал, и в этот раз опять как их только не менял и все точки и все запятые и вместе и тд..всегда ошибка в этой строке при сохранении.
Может кто то её набрать текстом здесь в чате, что бы её можно было скопировать?
И еще, у автора этого поста именно так и стоит в примере...в конце точка, а сразу за ней запятая.
Теперь вопрос зачем автор сбивал с толку и выложил скрин где не верно стоят знаки..точка и запятая у него рядом после 99999.
Вот выложу тут рабочий текст строки, думаю кому то может пригодится..
GroupEnumUnitsInRangeOfLoc( udg_Group, udg_Point, 99999, null)
Desgul спасибо Вам что направили мои сомнения что это скрипт вообще рабочий в нужное русло)
Отредактирован ScorpioT1000
Отредактирован PT153
Отредактирован Stray_Lucifer
Вот например в таком триггере это будет работать?
Отредактирован PT153
Я предлагал иметь группу;
иметь пару триггеров для добавления или удаления каких либо юнитов в или из группы - например, юнитов, нанимаемых в казармах, при смерти юнитов соответственно удалять их из группы;
Действия с юнитами делать через for group;
Не очищать группу после.