function SetUnitMaxLife takes unit u, real life returns nothing
local real r = life - GetUnitState(u, UNIT_STATE_MAX_LIFE)
if r > 0. then
if r > 1000. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x05)
call UnitRemoveAbility(u, 'A005')
set r = r - 1000.
exitwhen r < 1000.
endloop
endif
if r > 100. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x04)
call UnitRemoveAbility(u, 'A005')
set r = r - 100.
exitwhen r < 100.
endloop
endif
if r > 10. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x03)
call UnitRemoveAbility(u, 'A005')
set r = r - 10.
exitwhen r < 10.
endloop
endif
if r > 1. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x02)
call UnitRemoveAbility(u, 'A005')
set r = r - 1.
exitwhen r < 1.
endloop
endif
else
if r < -1000. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x09)
call UnitRemoveAbility(u, 'A005')
set r = r + 1000.
exitwhen r > -1000.
endloop
endif
if r < -100. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x08)
call UnitRemoveAbility(u, 'A005')
set r = r + 100.
exitwhen r > -100.
endloop
endif
if r < -10. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x07)
call UnitRemoveAbility(u, 'A005')
set r = r + 10.
exitwhen r > -10.
endloop
endif
if r < -1. then
loop
call UnitAddAbility(u, 'A005')
call SetUnitAbilityLevel(u, 'A005', 0x06)
call UnitRemoveAbility(u, 'A005')
set r = r + 1.
exitwhen r > -1.
endloop
endif
endif
endfunction
Где 'A005' ид спела на основе "Предмет: увеличение запаса здоровья" с уровнями:
1: +0 здоровья
2: -1
3: -10
4: -100
5: -1000
6: +1
7: +10
8: +100
9: +1000
1: +0 здоровья
2: -1
3: -10
4: -100
5: -1000
6: +1
7: +10
8: +100
9: +1000
А можно давать сразу способность на основе "Талисмана здоровья". Это, кстати, даже с не-Героем прокатит.
Ред. Singularity
В процессе разработки оказалось, что при повышении уровня способности, базированной на Life Bonus (Greater), она не добавляла максимальное здоровье, которое должна была.
После тщательной серии проверок выяснилось следующее: