Расширенная функция определения, уязвим ли юнит или нет. Позволяет определять специфические неуязвимости (например, неуязвимость феникса при морфе и неуязвимость мастера клинка при создании иллюзий).
function IsUnitInvulnerable takes unit Unit returns boolean
local real Health_Current = GetWidgetLife(Unit)
local real Mana_Current = GetUnitState(Unit,UNIT_STATE_MANA)
local boolean Check_Health
call SetWidgetLife(Unit,Health_Current + 0.001)
if Health_Current != GetWidgetLife(Unit) then
call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
set Check_Health = (GetWidgetLife(Unit) == Health_Current + 0.001)
else
call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
set Check_Health = (GetWidgetLife(Unit) == Health_Current)
call SetWidgetLife(Unit,Health_Current)
endif
if Check_Health then
return not (GetUnitState(Unit,UNIT_STATE_MANA) != Mana_Current)
endif
return Check_Health
endfunction