Делаем следующим образом: Создаем 4 скилла с 100 уровнями, с каждым левелом увеличиваем длительность отката на 0.5 секунд, получим 1\1.5\2\2.5 (+0.5), в итоге до 50 секунд. Далее; При касте нужной абилы запоминаем в хэш абилку, удаляем её у персонажа, добавляем абилу с откатом, устанавливаем нужный уровень для нужной длительности отката, заставляем использовать абилку. Запускаем таймер на соответствующее время, по истечению таймера удаляем откатную абилу и возвращаем герою оригинал. Собственно все.. Примерный внешний вид кода:
function CD2 takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = LoadInteger(udg_Data,GetHandleId(t), 0)
local integer i1 = LoadInteger(udg_Data,GetHandleId(t), 1)
local unit u = LoadUnitHandle(udg_Data,GetHandleId(t), 2)
call RemoveLocation(u, 'cooldownabilityid')
call AddAbility(u, i1)
call SetUnitAbilityLevel(u,i1,i)
call DestroyTimer(t)
call FlushChildHashtable(udg_Data,GetHandleId(t))
set t = null
set u = null
endfunction
function CD takes nothing returns nothing
local integer i = 1
local unit u1 = GetTriggerUnit()
local unit u2 = GetSpellTargetUnit()
local real r = 0.5*(GetDist(GetUnitX(u1, GetUnitY(u1), GetUnitX(u2),GetUnitY(u2))\5)
local timer t = CreateTimer()
call SaveInteger(udg_Data,GetHandleId(t),0,GetUnitAbilityLevel(GetSpellAbility()))
call SaveInteger(udg_Data,GetHandleId(t),1, GetSpellAbilityId())
call SaveUnitHandle(udg_Data,GetHandleId(t), 2, u1)
call RemoveAbility(GetSpellAbility())
call AddAbility(u1, 'cooldownabilityid')
call SetUnitAbilityLevel(u1, 'cooldownabilityid', r\2)
call OrderUnit(u1, 'cooldownabilityid')
call TimerStart(t, r, false,function CD2)
set t = null
set u1 = null
set u2= null
endfunction
писал сразу на форуме, по этому ошибок может быть море, но логическая составляющая скрипта верна.
Однако у этого способа есть несколько больших проблем.
1. Сколько Способностей для каста, столько и абил * количество уровней у абилы
2. Все способности должны быть в прелоаде карты (подгружены в ините на дамми юнитах, иначе в игре будут эпические лаги)
3. Если обойти пункт 1, сделав 4 способности(по максимальному количеству нюков у одного героя) то не будет А) - описания скилла, Б) - иконки скилла
Собственно все. Работа муторная, но, в некоторых случаях она того стоит.