Следующая строка вызывает утечки, как избавиться от них? По-моему GetUnitsSelectedAll().
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAll(GetTriggerPlayer()))

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

GetUnitsSelectedAll не освобождает хендл, но это не утечка.
С помощью set bj_wantDestroyGroup = true созданная в GetUnitsSelectedAll группа удаляются, но хендл не освобождается. Это не так страшно, но лучше сделать вот так.
globals
    group TempGroup
endglobals

function GetUnitsSelectedAllFixed takes player whichPlayer returns group
    set TempGroup = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(TempGroup, whichPlayer, null)
    return TempGroup
endfunction

...

set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAllFixed(GetTriggerPlayer()))
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
29
5 лет назад
0
8gabriel8:
Наверное, дело в GetUnitSelectedAll.
Проморгал я работу с выбором
function GetUnitsSelectedAll takes player whichPlayer returns group
    local group g = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(g, whichPlayer, null)
    return g
endfunction
1
28
5 лет назад
Отредактирован PT153
1
GetUnitsSelectedAll не освобождает хендл, но это не утечка.
С помощью set bj_wantDestroyGroup = true созданная в GetUnitsSelectedAll группа удаляются, но хендл не освобождается. Это не так страшно, но лучше сделать вот так.
globals
    group TempGroup
endglobals

function GetUnitsSelectedAllFixed takes player whichPlayer returns group
    set TempGroup = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(TempGroup, whichPlayer, null)
    return TempGroup
endfunction

...

set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAllFixed(GetTriggerPlayer()))
Принятый ответ
0
19
5 лет назад
0
PT153, спасибо. Не исправило постоянное появление при пике новых хэндлов, но все же спасибо. Не думаю, что это хоть как-то сможет повлиять на производительность, но просто стараюсь не повторять прошлых ошибок.
0
28
5 лет назад
0
Не исправило постоянное появление при пике новых хэндлов
Для этого можно после set udg_InfoPick... вставить строчку set TempGroup = null, тогда на хендл ничего ссылаться больше не будет и он вскоре будет освобождён. Но TempGroup - глобальная переменная, а потому подразумевается, что она будет часто перезаписываться.
PT153:
но это не утечка
На самом деле, скорее всего, утечкой тут будет сама переменная g, потому что она ссылается куда-то, и из-за этого может быть не удалена.
0
19
5 лет назад
0
PT153, а не нужно прописывать call DestroyGroup(TempGroup)?
PT153, в общем при пике юнитов появляются и не исчезают хэндлы, равные (кол-ву юнитов - 1)
0
28
5 лет назад
Отредактирован PT153
0
а не нужно прописывать call DestroyGroup(TempGroup)?
Ты же уже написал set bj_wantDestroyGroup = true. Из-за этого данная группа удалится внутри GroupPickRandomUnit.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.