• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[Trigger] Need help for leak. GetConvertedPlayerId and CountUnitsInGroup problem I think

Status
Not open for further replies.
Level 6
Joined
May 29, 2013
Messages
139
JASS:
function Trig_Upkeep_______u_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 11
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set udg_Upkeep[GetForLoopIndexA()] = 0
        if ( Trig_Upkeep_______u_Func001Func003C() ) then
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hpea')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 1 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hfoo')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 2 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'nhea')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 2 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hmpr')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 2 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hhes')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'h01M')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'eshd')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hkni')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hspt')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'nemi')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hbot')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 4 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hcth')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 7 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'hsor')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 7 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'nmed')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 7 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'ocat')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 7 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'owtw')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 7 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'nhym')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 14 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'o00L')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 14 * CountUnitsInGroup(udg_CHECKupkeep) ) )
            set udg_CHECKupkeep = GetUnitsOfPlayerAndTypeId(ConvertedPlayer(GetForLoopIndexA()), 'otrb')
            set udg_Upkeep[GetForLoopIndexA()] = ( udg_Upkeep[GetForLoopIndexA()] + ( 80 * CountUnitsInGroup(udg_CHECKupkeep) ) )
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop

It is converted my trigger function for jass.
Event is timer. if timer expired, this action begin.
but It has many leak. too much handle increased after the trigger works.
how can i fix this?

Edit : No it's not GetConvertedPlayerId, problem is GetUnitsOfPlayerAndTypeId
 
Last edited:
GetUnitsOfPlayerAndTypeId() creates an object that you need to destroy before you lose its reference. Keep in mind that this function also has a reference leak that can't be removed via GUI. Most people advise GUI users to avoid this function all together for that same reason.

From the looks of it, you create a new unit group 19 times in one loop iteration. I recommend just grouping everything in an area and then filtering them out with an If/Then/Else (under the assumption you just converted GUI->JASS thinking we would understand it more when you actually did the complete opposite).

If you're trying to learn JASS from converted GUI functions, you can alternatively just use FirstOfGroup().
 
Status
Not open for further replies.
Top