- Joined
- Sep 4, 2007
- Messages
- 407
Someone told me that destroying a boolexpr is dangerous. Is it true? If it is, why is that? I have a trigger that only works if I destroy it.
It is this one:
If I do not destroy the boolexpr 'filter', the trigger does not work.
It is this one:
JASS:
function GUOfPM takes player whichPlayer, boolexpr filter returns group
call GroupEnumUnitsOfPlayer(udg_GAME_PackG[5], whichPlayer, filter)
call DestroyBoolExpr(filter)
return udg_GAME_PackG[5]
endfunction
function Trig_SP_TA_Func001A takes nothing returns boolean
return GetUnitAbilityLevel(GetFilterUnit(),'A00X') == bj_forLoopAIndex
endfunction
function Trig_SP_TA_Func001B takes nothing returns boolean
return GetUnitAbilityLevel(GetFilterUnit(),'A00X') == bj_forLoopBIndex
endfunction
function Trig_SP_TA_Actions takes nothing returns nothing
local unit newpackunit
local group pack = udg_GAME_PackG[0]
local group overpack = udg_GAME_PackG[1]
local integer LoopC
local integer xlvl
local integer packcount
local integer overcount
local player packowner
set LoopC = 1
set bj_forLoopAIndex = 1
set bj_forLoopBIndex = 1
loop
exitwhen LoopC > 12
if (udg_CC_SocialBehavior[LoopC] == 3) then
loop
exitwhen bj_forLoopAIndex > 10
set packowner = Player(LoopC - 1)
set pack = GUOfPM(packowner, Condition(function Trig_SP_TA_Func001A))
set packcount = CountUnitsInGroup(pack)
if packcount < 5 and packcount != 0 then
set xlvl = bj_forLoopAIndex
loop
exitwhen bj_forLoopBIndex > 10
set overpack = GUOfPM(packowner, Condition(function Trig_SP_TA_Func001B))
set overcount = CountUnitsInGroup(overpack)
if overcount > 5 then
set newpackunit = GroupPickRandomUnit(overpack)
call SetUnitAbilityLevel( newpackunit,'A00X', xlvl )
set pack = GUOfPM(packowner, Condition(function Trig_SP_TA_Func001A))
set packcount = CountUnitsInGroup(pack)
if packcount >= 5 then
set bj_forLoopBIndex = 11
endif
else
if overcount + packcount <= 5 then
set newpackunit = GroupPickRandomUnit(overpack)
call SetUnitAbilityLevel( newpackunit,'A00X', xlvl )
if packcount >= 5 then
set bj_forLoopBIndex = 11
endif
endif
endif
set bj_forLoopBIndex = bj_forLoopBIndex + 1
endloop
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endif
set LoopC = LoopC + 1
endloop
set udg_GAME_PackG[5] = null
set newpackunit = null
set packowner = null
set pack = null
set overpack = null
endfunction
//===========================================================================
function InitTrig_SP_TogetherAdjustment takes nothing returns nothing
local trigger SP_TogetherAdjustment = CreateTrigger( )
set udg_GAME_PackG[0] = CreateGroup()
set udg_GAME_PackG[1] = CreateGroup()
set udg_GAME_PackG[5] = CreateGroup()
call TriggerRegisterTimerEvent( SP_TogetherAdjustment, 0.20, true )
call TriggerAddAction( SP_TogetherAdjustment, function Trig_SP_TA_Actions )
set SP_TogetherAdjustment = null
endfunction
If I do not destroy the boolexpr 'filter', the trigger does not work.