function Trig_Meditation_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A032' ) ) then
return false
endif
return true
endfunction
function ZenCheck takes unit monk returns boolean
if GetUnitState(monk, UNIT_STATE_LIFE) < GetUnitState(monk, UNIT_STATE_MAX_LIFE) then
return false
endif
if (GetUnitState(monk, UNIT_STATE_MANA) < GetUnitState(monk, UNIT_STATE_MAX_MANA)) then
return false
endif
return true
endfunction
function ZenTick takes nothing returns nothing
local timer cl = GetExpiredTimer()
local unit w = LoadUnitHandle (udg_HT_self, GetHandleId(cl), 57)
if ( GetUnitCurrentOrder(w) == String2OrderIdBJ("corporealform") ) then
call SetUnitState (w, UNIT_STATE_LIFE, (GetUnitState(w, UNIT_STATE_LIFE) + (GetUnitState(w, UNIT_STATE_MAX_LIFE) / 20 ) ) )
call SetUnitState (w, UNIT_STATE_MANA, (GetUnitState(w, UNIT_STATE_MANA) + (GetUnitState(w, UNIT_STATE_MAX_MANA) / 20 ) ) )
if ZenCheck(w) == true then
call IssueImmediateOrder (w, "holdposition")
endif
else
call PauseTimer (cl)
call DestroyTimer (cl)
call FlushChildHashtableBJ( GetHandleId(cl), udg_HT_self )
call BJDebugMsg ("timer cleared")
endif
set cl = null
set w = null
endfunction
function Trig_Meditation_Actions takes nothing returns nothing
local timer ck
if (ZenCheck(GetTriggerUnit()))== true then
call IssueImmediateOrder (GetTriggerUnit(), "holdposition")
else
set ck = CreateTimer()
call SaveUnitHandle (udg_HT_self, GetHandleId(ck), 57, GetTriggerUnit())
call TimerStart ( ck, 1.00, true, function ZenTick )
endif
set ck = null
endfunction
//===========================================================================
function InitTrig_Meditation takes nothing returns nothing
set gg_trg_Meditation = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Meditation, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Meditation, Condition( function Trig_Meditation_Conditions ) )
call TriggerAddAction( gg_trg_Meditation, function Trig_Meditation_Actions )
endfunction