Name | Type | is_array | initial_value |
AAAM3_CycleArray | unit | Yes | |
AAAM3_CycleMax | integer | No | |
AAAM3_CycleMin | integer | No | |
AAAM3_CycleStep | integer | No | |
AAAM3_GROUPABIL | abilcode | No | |
AAAM3_i | integer | No | |
AAAM3_J | integer | No | |
AAAM3_LimitChecker | real | No | |
AAAM3_newIndex | integer | No | |
AAAM3_Timer | timer | No | |
Aura_ABILITIES | abilcode | Yes | |
Aura_AuraCount | integer | Yes | 0 |
Aura_AURAS | abilcode | Yes | |
Aura_BUFFS | buffcode | Yes | |
Aura_CycleSize | integer | No | |
Aura_Event | real | No | |
Aura_Number | integer | No | |
Aura_SourceGroup | group | Yes | |
Aura_TrigUnit | unit | No | |
temp_group | group | No | |
zzAura_GUI_leave | boolean | No | |
zzAura_GUI_Max | integer | No |
function AAAMPeriodicWE takes nothing returns boolean
local integer i = 0
local integer j = 0
local integer newIndex = udg_AAAM3_newIndex
local boolean leave = true
local integer store_i
local integer array validAuras
local integer max
loop
exitwhen i > udg_Aura_Number
if udg_Aura_AuraCount[i] > 0 then
//call BJDebugMsg(I2S(j))
set validAuras[j] = i
set j = j + 1
//call BJDebugMsg(I2S(i))
endif
set i = i + 1
endloop
set max = j - 1
set i = 0
set j = udg_AAAM3_CycleMin
//call BJDebugMsg(I2S(udg_AAAM3_CycleMin))
//call BJDebugMsg(I2S(udg_AAAM3_CycleMax))
if udg_AAAM3_CycleMin == 1 then
set udg_Aura_Event = 0.3 // Set Event for Starting a new cycle
endif
set udg_Aura_TrigUnit = udg_AAAM3_CycleArray[j]
set udg_Aura_Event = 0.1 //Set Event for Starting checks for 1 unit
loop
exitwhen j > udg_AAAM3_CycleMax
set udg_AAAM3_CycleArray[j] = null
loop
exitwhen i > max
set store_i = i
set i = validAuras[i]
if GetUnitAbilityLevel(udg_Aura_TrigUnit, udg_Aura_BUFFS[i]) > 0 then
if UnitAddAbility( udg_Aura_TrigUnit , udg_Aura_ABILITIES[i] ) then
set udg_Aura_Event = i // Set event for unit aquiring aura ability
endif
set leave = false
else
if UnitRemoveAbility( udg_Aura_TrigUnit , udg_Aura_ABILITIES[i] ) then
set udg_Aura_Event = 1 + udg_Aura_Number + i
endif
endif
set i = store_i + 1
endloop
if not leave then
set udg_AAAM3_CycleArray[newIndex] = udg_Aura_TrigUnit
set newIndex = newIndex + 1
else
if not IsUnitType(udg_Aura_TrigUnit , UNIT_TYPE_DEAD) then
if GetUnitTypeId(udg_Aura_TrigUnit) == 0 then
else
set udg_AAAM3_CycleArray[newIndex] = udg_Aura_TrigUnit
set newIndex = newIndex + 1
endif
else
call UnitRemoveAbility ( udg_Aura_TrigUnit , udg_AAAM3_GROUPABIL )
endif
set udg_Aura_Event = 0.5 //Set Event for unit being kicked out of the CycleAraay
endif
set udg_Aura_Event = 0.2 // Set Event for unit checks are finished
set j = j + 1
set udg_Aura_TrigUnit = udg_AAAM3_CycleArray[j]
set leave = true
set i = 0
set udg_Aura_Event = 0.1 //Set Event for unit checks begin for next unit
endloop
//call BJDebugMsg("Cycle Size: " + I2S(udg_Aura_CycleSize))
if udg_AAAM3_CycleMax + udg_AAAM3_CycleStep < udg_Aura_CycleSize then
set udg_AAAM3_CycleMin = udg_AAAM3_CycleMax+1
set udg_AAAM3_CycleMax = udg_AAAM3_CycleMax + udg_AAAM3_CycleStep
set udg_AAAM3_newIndex = newIndex
//call TriggerEvaluate(GetTriggeringTrigger())
else
if udg_AAAM3_CycleMax < udg_Aura_CycleSize then
set udg_AAAM3_CycleMin = udg_AAAM3_CycleMax+1
set udg_AAAM3_CycleMax = udg_Aura_CycleSize
set udg_AAAM3_newIndex = newIndex
//call TriggerEvaluate(GetTriggeringTrigger())
else
if udg_Aura_CycleSize < udg_AAAM3_CycleStep then
set udg_AAAM3_CycleMax = udg_Aura_CycleSize
else
set udg_AAAM3_CycleMax = udg_AAAM3_CycleStep
endif
set udg_AAAM3_CycleMin = 1
set udg_AAAM3_newIndex = 1
set udg_Aura_CycleSize = newIndex
set udg_Aura_Event = 0.4 //Set Event for Cycle is finished
endif
endif
return true
endfunction
//===========================================================================
function InitTrig_AAAM_Periodic_Intervals takes nothing returns nothing
set gg_trg_AAAM_Periodic_Intervals = CreateTrigger( )
//call TriggerRegisterTimerEvent( gg_trg_AAAM_Periodic_Intervals, 0.03, true )
call TriggerAddCondition( gg_trg_AAAM_Periodic_Intervals, Condition(function AAAMPeriodicWE) )
endfunction
function AAAMPeriodicWE2 takes nothing returns boolean
local integer i = 0
local integer j = 0
local integer newIndex = udg_AAAM3_newIndex
local boolean leave = true
local integer store_i
local integer array validAuras
local integer max
loop
exitwhen i > udg_Aura_Number
if udg_Aura_AuraCount[i] > 0 then
//call BJDebugMsg(I2S(j))
set validAuras[j] = i
set j = j + 1
endif
set i = i + 1
endloop
set max = j - 1
set i = 0
set j = udg_AAAM3_CycleMin
//call BJDebugMsg(I2S(udg_AAAM3_CycleMin))
//call BJDebugMsg(I2S(udg_AAAM3_CycleMax))
set udg_Aura_Event = 0.3 // Set Event for Starting a new cycle
set udg_Aura_TrigUnit = udg_AAAM3_CycleArray[j]
set udg_Aura_Event = 0.1 //Set Event for Starting checks for 1 unit
loop
exitwhen j > udg_AAAM3_CycleMax
set udg_AAAM3_CycleArray[j] = null
loop
exitwhen i > max
set store_i = i
set i = validAuras[i]
if GetUnitAbilityLevel(udg_Aura_TrigUnit, udg_Aura_BUFFS[i]) > 0 then
if UnitAddAbility( udg_Aura_TrigUnit , udg_Aura_ABILITIES[i] ) then
set udg_Aura_Event = i // Set event for unit aquiring aura ability
endif
set leave = false
else
if UnitRemoveAbility( udg_Aura_TrigUnit , udg_Aura_ABILITIES[i] ) then
set udg_Aura_Event = 1 + udg_Aura_Number + i
endif
endif
set i = store_i + 1
endloop
if not leave then
set udg_AAAM3_CycleArray[newIndex] = udg_Aura_TrigUnit
set newIndex = newIndex + 1
else
if not IsUnitType(udg_Aura_TrigUnit , UNIT_TYPE_DEAD) then
if GetUnitTypeId(udg_Aura_TrigUnit) == 0 then
else
set udg_AAAM3_CycleArray[newIndex] = udg_Aura_TrigUnit
set newIndex = newIndex + 1
endif
else
call UnitRemoveAbility ( udg_Aura_TrigUnit , udg_AAAM3_GROUPABIL )
endif
set udg_Aura_Event = 0.5 //Set Event for unit being kicked out of the CycleAraay
endif
set udg_Aura_Event = 0.2 // Set Event for unit checks are finished
set j = j + 1
set udg_Aura_TrigUnit = udg_AAAM3_CycleArray[j]
set leave = true
set i = 0
set udg_Aura_Event = 0.1 //Set Event for unit checks begin for next unit
endloop
//Set Event for Cycle is finished
//call BJDebugMsg("Cycle Size: " + I2S(udg_Aura_CycleSize))
if udg_AAAM3_CycleMax + udg_AAAM3_CycleStep < udg_Aura_CycleSize then
set udg_AAAM3_CycleMin = udg_AAAM3_CycleMax+1
set udg_AAAM3_CycleMax = udg_AAAM3_CycleMax + udg_AAAM3_CycleStep
set udg_AAAM3_newIndex = newIndex
call TriggerEvaluate(GetTriggeringTrigger())
else
if udg_AAAM3_CycleMax < udg_Aura_CycleSize then
set udg_AAAM3_CycleMin = udg_AAAM3_CycleMax+1
set udg_AAAM3_CycleMax = udg_Aura_CycleSize
set udg_AAAM3_newIndex = newIndex
call TriggerEvaluate(GetTriggeringTrigger())
else
if udg_Aura_CycleSize < udg_AAAM3_CycleStep then
set udg_AAAM3_CycleMax = udg_Aura_CycleSize
else
set udg_AAAM3_CycleMax = udg_AAAM3_CycleStep
endif
set udg_AAAM3_CycleMin = 1
set udg_AAAM3_newIndex = 1
set udg_Aura_CycleSize = newIndex
set udg_Aura_Event = 0.4
endif
endif
return true
endfunction
//===========================================================================
function InitTrig_AAAM_Periodic_Instant takes nothing returns nothing
set gg_trg_AAAM_Periodic_Instant = CreateTrigger( )
//call TriggerRegisterTimerEvent( gg_trg_AAAM_Periodic_Instant, 0.3, true )
call TriggerAddCondition( gg_trg_AAAM_Periodic_Instant, Condition(function AAAMPeriodicWE2) )
endfunction
function AAAMPeriodicFG takes nothing returns nothing
local unit u = GetEnumUnit()
local integer i = 0
local integer ab1
local integer ab2
local boolean leave = true
loop
exitwhen i > udg_Aura_Number
if GetUnitAbilityLevel(u, udg_Aura_BUFFS[i]) > 0 then
if UnitAddAbility( u , udg_Aura_ABILITIES[i] ) then
call UnitRemoveAbility( u , udg_Aura_ABILITIES_DUMMY[i])
endif
set leave = false
else
set ab1 = udg_Aura_ABILITIES[i]
set ab2 = udg_Aura_ABILITIES_DUMMY[i]
if ( GetUnitAbilityLevel( u , ab2) == 0 ) then
call UnitRemoveAbility( u , ab1 )
else
if GetUnitAbilityLevel( u , ab2 ) == 10 then
call UnitRemoveAbility( u , ab2)
else
call IncUnitAbilityLevel( u , ab2 )
set leave = false
endif
endif
endif
set i = i + 1
endloop
if leave then
call GroupRemoveUnit( udg_Aura_CycleGroup , u)
endif
set u = null
endfunction
function AAAMPeriodic takes nothing returns boolean
call ForGroup( udg_Aura_CycleGroup, function AAAMPeriodicFG )
return true
endfunction
//===========================================================================
function InitTrig_AAAM_Periodic takes nothing returns nothing
set gg_trg_AAAM_Periodic = CreateTrigger( )
call TriggerRegisterTimerEvent( gg_trg_AAAM_Periodic, 0.30, true )
call TriggerAddCondition( gg_trg_AAAM_Periodic, Condition(function AAAMPeriodic) )
endfunction
function Trig_AAAM_Create_Source_Copy_Actions takes nothing returns nothing
local trigger trig
local integer i = 0
local unit u = GetTriggerUnit()
local boolean addtogroup = false //The unit must be added to the main group, if it is not already in the group
loop
exitwhen i > udg_Aura_Number
if not IsUnitInGroup(u, udg_Aura_GROUPS[i]) and GetUnitAbilityLevel(u, udg_Aura_AURAS[i]) != 0 then
set addtogroup = true
set trig = CreateTrigger()
call GroupAddUnit( udg_Aura_GROUPS[i] , u )
call SaveTriggerHandle(udg_Aura_Hashtable,GetHandleId(u),i,trig)
call SaveInteger(udg_Aura_Hashtable,GetHandleId(trig),0,i)
call TriggerRegisterUnitInRangeSimple( LoadTriggerHandle(udg_Aura_Hashtable, GetHandleId(u), i), udg_Aura_RANGES[i], u )
call TriggerAddCondition(LoadTriggerHandle(udg_Aura_Hashtable,GetHandleId(u),i),Condition( function AAAM_Dynamic))
if GetUnitAbilityLevelSwapped(udg_Aura_ABILITIES[i], u) == 0 then
if not UnitAddAbility( u , udg_Aura_ABILITIES_DUMMY[i] ) then
call SetUnitAbilityLevel( u, udg_Aura_ABILITIES_DUMMY[i], 1 )
endif
else
set addtogroup = false
endif
else
endif
set i = i + 1
endloop
if addtogroup then
call GroupAddUnit(udg_Aura_CycleGroup,u)
endif
set u = null
endfunction
//===========================================================================
function InitTrig_AAAM_Create_Source takes nothing returns nothing
set gg_trg_AAAM_Create_Source = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AAAM_Create_Source, EVENT_PLAYER_HERO_REVIVE_FINISH )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AAAM_Create_Source, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerRegisterEnterRectSimple( gg_trg_AAAM_Create_Source, GetPlayableMapRect() )
call TriggerAddAction( gg_trg_AAAM_Create_Source, function Trig_AAAM_Create_Source_Copy_Actions )
endfunction
function Aura_Destroy takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u = (LoadUnitHandle(udg_Aura_Hashtable, GetHandleId(t), 0))
local integer my_handle = LoadInteger(udg_Aura_Hashtable, GetHandleId(t), 1)
local integer i = LoadInteger(udg_Aura_Hashtable, GetHandleId(t), 2)
if GetUnitAbilityLevelSwapped(udg_Aura_AURAS[i], u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD) then
call GroupRefresh(udg_Aura_GROUPS[i])
call GroupRemoveUnit( udg_Aura_GROUPS[i] , u )
call DestroyTrigger(LoadTriggerHandle(udg_Aura_Hashtable,my_handle,i))
endif
call PauseTimer(t)
call DestroyTimer(t)
set t=null
set u = null
endfunction
function Aura_Actions takes nothing returns boolean
local timer t
local integer i = 0
loop
exitwhen i > udg_Aura_Number
if IsUnitInGroup(GetTriggerUnit() , udg_Aura_GROUPS[i]) then
set t = CreateTimer()
call SaveUnitHandle(udg_Aura_Hashtable, GetHandleId(t), 0, GetTriggerUnit())
call SaveInteger(udg_Aura_Hashtable, GetHandleId(t), 1, GetHandleId(GetTriggerUnit()))
call SaveInteger(udg_Aura_Hashtable, GetHandleId(t), 2, i)
call TimerStart(t, 2.5, false, function Aura_Destroy)
endif
set i = i +1
endloop
set t=null
return true
endfunction
//===========================================================================
function InitTrig_AAAM_Destroy_Source takes nothing returns nothing
set gg_trg_AAAM_Destroy_Source = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AAAM_Destroy_Source, EVENT_PLAYER_UNIT_DROP_ITEM )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AAAM_Destroy_Source, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_AAAM_Destroy_Source, Condition( function Aura_Actions ) )
//call TriggerAddAction( gg_trg_AAAM_Destroy_Source, function Trig_destory_copy_Copy_Actions )
endfunction