Следующая строка вызывает утечки, как избавиться от них? По-моему 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
Установите JNGP и посмотрите код функции
function GroupPickRandomUnit takes group whichGroup returns unit
    // If the user wants the group destroyed, remember that fact and clear
    // the flag, in case it is used again in the callback.
    local boolean wantDestroy = bj_wantDestroyGroup
    set bj_wantDestroyGroup = false

    set bj_groupRandomConsidered = 0
    set bj_groupRandomCurrentPick = null
    call ForGroup(whichGroup, function GroupPickRandomUnitEnum)

    // If the user wants the group destroyed, do so now.
    if (wantDestroy) then
        call DestroyGroup(whichGroup)
    endif
    return bj_groupRandomCurrentPick
endfunction

function GroupPickRandomUnitEnum takes nothing returns nothing
    set bj_groupRandomConsidered = bj_groupRandomConsidered + 1
    if (GetRandomInt(1,bj_groupRandomConsidered) == 1) then
        set bj_groupRandomCurrentPick = GetEnumUnit()
    endif
endfunction
2
19
5 лет назад
2
NazarPunk, сорре, я слишком тупой. поясни.
NazarPunk, мне нужно указать set bj_wantDestroyGroup = true?
Перед вызовом, да?
0
26
5 лет назад
0
Поставь перед строкой
set bj_wantDestroyGroup = true
Ну ты догадался)
0
19
5 лет назад
0
8gabriel8, поставил, но утечки все равно остались, хоть их и стало меньше вроде. (Проверял, другие триггеры не влияют)
0
29
5 лет назад
0
KaneThaumaturge, попробуйте так
set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAll(GetTriggerPlayer()))
0
19
5 лет назад
0
NazarPunk, Я уже написал так, но утечки все равно появляются, при этом триггере.
1
26
5 лет назад
1
Наверное, дело в GetUnitSelectedAll.
0
19
5 лет назад
0
8gabriel8, Ладно, оставлю пока так.
0
28
5 лет назад
0
утечки все равно появляются
Откуда такая уверенность?
0
18
5 лет назад
0
Это же конвертация из гуи, верно понимаю?)
Если игровой процесс в твоей карте не занимает больше 20-30 минут и утекает не очень сильно - то тебе не нужно волноваться по поводу каждой утечки
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
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.