Is this leak free?

AdamGriffith

You can change this now in User CP.
Reaction score
69
As the title says.

JASS:
function Trig_Dialog_Button_Actions takes nothing returns nothing
    local integer i = 0
    local force f = CreateForce()
    if GetClickedButton() == udg_Dialog_Button[0] then
        //Do nothing.
    elseif GetClickedButton() == udg_Dialog_Button[1] then
        set i = 0
        loop
            exitwhen i == 6
            call ForceClear(f)
            call ForceAddPlayer(f, Player(i*2))
            call ForceAddPlayer(f, Player(i*2+1))
            call SetForceAllianceStateBJ(f, f, bj_ALLIANCE_ALLIED_VISION)
            set i = i + 1
        endloop
    elseif GetClickedButton() == udg_Dialog_Button[2] then
        set i = 0
        loop
            exitwhen i == 4
            call ForceClear(f)
            call ForceAddPlayer(f, Player(i*2))
            call ForceAddPlayer(f, Player(i*2+1))
            call ForceAddPlayer(f, Player(i*2+2))
            call SetForceAllianceStateBJ(f, f, bj_ALLIANCE_ALLIED_VISION)
            set i = i + 1
        endloop
    elseif GetClickedButton() == udg_Dialog_Button[3] then
        set i = 0
        loop
            exitwhen i == 3
            call ForceClear(f)
            call ForceAddPlayer(f, Player(i*2))
            call ForceAddPlayer(f, Player(i*2+1))
            call ForceAddPlayer(f, Player(i*2+2))
            call ForceAddPlayer(f, Player(i*2+3))
            call SetForceAllianceStateBJ(f, f, bj_ALLIANCE_ALLIED_VISION)
            set i = i + 1
        endloop
    elseif GetClickedButton() == udg_Dialog_Button[4] then
        set i = 0
        loop
            exitwhen i == 2
            call ForceClear(f)
            call ForceAddPlayer(f, Player(i*2))
            call ForceAddPlayer(f, Player(i*2+1))
            call ForceAddPlayer(f, Player(i*2+2))
            call ForceAddPlayer(f, Player(i*2+3))
            call ForceAddPlayer(f, Player(i*2+4))
            call ForceAddPlayer(f, Player(i*2+5))
            call SetForceAllianceStateBJ(f, f, bj_ALLIANCE_ALLIED_VISION)
            set i = i + 1
        endloop
    endif
    call DestroyForce(f)
    set f = null
endfunction

//===========================================================================
function InitTrig_Dialog_Button takes nothing returns nothing
    set gg_trg_Dialog_Button = CreateTrigger(  )
    call TriggerRegisterDialogEvent(gg_trg_Dialog_Button, udg_Dialog)
    call TriggerAddAction( gg_trg_Dialog_Button, function Trig_Dialog_Button_Actions )
endfunction


Thanks,
Adam
 

Strilanc

Veteran Scripter
Reaction score
42
That function can be written a lot better. You can extract all the repeated team logic out of the if block. The result is shorter, clearer, and easier to maintain.

JASS:
function Trig_Dialog_Button_Actions takes nothing returns nothing
    local integer i
    local integer j
    local integer numTeams
    local integer numMembers
    local force f

    if GetClickedButton() == udg_Dialog_Button[0] then
        set numTeams = 12
    elseif GetClickedButton() == udg_Dialog_Button[1] then
        set numTeams = 6
    elseif GetClickedButton() == udg_Dialog_Button[2] then
        set numTeams = 4
    elseif GetClickedButton() == udg_Dialog_Button[3] then
        set numTeams = 3
    elseif GetClickedButton() == udg_Dialog_Button[4] then
        set numTeams = 2
    else
        call BJDebugMsg("Map Error: Unrecognised team selection")
        set numTeams = 12
    endif

    set numMembers = 12/numTeams
    set f = CreateForce()
    set i = 0
    loop
        exitwhen i >= numTeams
        set j = 0
        loop
            exitwhen j >= numMembers
            call ForceAddPlayer(f, Player(i*numMembers + j))
            set j = j + 1
        endloop
        call SetForceAllianceStateBJ(f, f, bj_ALLIANCE_ALLIED_VISION)
        call ForceClear(f)
        set i = i + 1
    endloop
    call DestroyForce(f)
    set f = null
endfunction
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top