Объясните пожалуйста, вызывает ли это утечки? Если да, то как грамотно присвоить нулевое значение, чтобы всё продолжало работать как надо?
код
function mycode takes nothing returns nothing
local unit u = GetEnumUnit()
local group g = LoadGroupHandle(H,GetHandleId(u),0)
if g == null then
set g = CreateGroup()
endif
if CountUnitsInGroup(g) < 5 then
set bj_lastCreatedUnit = CreateUnit(GetOwningPlayer(u),'nshe',GetUnitX(u),GetUnitY(u),0)
call GroupAddUnit(g,bj_lastCreatedUnit)
call SaveGroupHandle(H,GetHandleId(u),0,g)
call DisplayTextToForce(GetPlayersAll(),I2S(CountUnitsInGroup(g)))
endif
set u = null
endfunction
На каждого выбранного юнита будет ежесекундно создаваться овечка, если овечек больше 5 у этого юнита, то они перестанут создаваться
В общем мне казалось, что функция local group g = LoadGroupHandle(H,GetHandleId(u),0) будет вызывать утечки без последующего обнуления, но что по счётчику хэндлов, что по нагрузке вара - их нет. Неужели всё хорошо?
Я привык, что локальные группы нужно обнулять (DestroyGroup, set = null), но в данном случае это ломает систему, поэтому обнуление я перенёс на смерть юнита
В общем мне казалось, что функция local group g = LoadGroupHandle(H,GetHandleId(u),0) будет вызывать утечки без последующего обнуления, но что по счётчику хэндлов, что по нагрузке вара - их нет. Неужели всё хорошо?
Я привык, что локальные группы нужно обнулять (DestroyGroup, set = null), но в данном случае это ломает систему, поэтому обнуление я перенёс на смерть юнита
Принятый ответ
ну не обнулили g
во-вторых, не привязали группу при ее создании к выбранному юниту. Короче, это уже ошибка.
во-вторых, не привязали группу при ее создании к выбранному юниту. Короче, это уже ошибка.
if g == null then
set g = CreateGroup()
//надо в хэш на зэндл выбранного записать группу
set g = null //переменная - это просто ссылка
endif
при смерти овцы удаляем ее из группы
при смерти выбранного юнита удаляем группу
при смерти выбранного юнита удаляем группу
может стоит подумать сделать на всю игру одну группу овечек или вообще обойтись без группы. будет фиксировать заход/выход овцы. На каждого выбранного заводим счетчик. А каждой овце привязываем выбранного. Когда овца умирает, то зная к кому привязана, у выбранного понижаем счетчик.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
во-вторых, не привязали группу при ее создании к выбранному юниту. Короче, это уже ошибка.
при смерти выбранного юнита удаляем группу
на всю игру одну группу овечекили вообще обойтись без группы. будет фиксировать заход/выход овцы. На каждого выбранного заводим счетчик. А каждой овце привязываем выбранного. Когда овца умирает, то зная к кому привязана, у выбранного понижаем счетчик.Отредактирован MpW
Это как, если на арену выйдет 20 юнитов, то наверное будет 20 групп создано. А еще 20 переборов на счетчиков групп
Отредактирован rsfghd
Отредактирован rsfghd