В основе наработки лежит новая функция BlzPauseUnitEx и 2 её самые главные особенности:
- Не исчезают иконки с панели приказов, в отличии от старой паузы
- Если юнит уже запаузен, то он не выйдет из паузы после её окончания, есть так называемый счетчик пауз (жаль его количество нельзя узнать), Вкратце: если на юнита 10 раз наложили паузу, нужно её 10 раз снять
раскрыть
stunEff="Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget"
StunSystem={}
function StunUnit(hero,dur)
if not StunSystem[GetHandleId(hero)] then
-- print("оглушен первый раз")
StunSystem[GetHandleId(hero)]={
Time=0,
Eff=nil,
Timer=nil
}
end
local data=StunSystem[GetHandleId(hero)]
local curdur=0
if data.Time==0 then
data.Timer=CreateTimer()
--print("старт нового таймера")
data.Eff=AddSpecialEffectTarget(stunEff,hero,"overhead")
BlzPauseUnitEx(hero,true)
end
if data.Time<dur then
--print("Более сильное оглушение, обновляем время")
data.Time=dur
else
--print("Есть более долгое оглушение ничего не делаем")
return
end
TimerStart(data.Timer, 0.1, true, function()
curdur=curdur+0.1
data.Time=data.Time-0.1
if curdur>=dur or not UnitAlive(hero) then
--print("Вышел из стана")
BlzPauseUnitEx(hero,false)
DestroyTimer(GetExpiredTimer())
data.Time=0
DestroyEffect(data.Eff)
data.Timer=nil
end
end)
end
Вызывать в любом месте через StunUnit(hero,dur).
Где hero - юнит которого хотим оглушить
А dur - время оглушения в секундах
Чтобы узнать в стане ли юнит, достаточно проверить состояние функцией IsUnitPaused, тут конечно да, есть пересечения с простой паузой, но можно этим просто пренебречь.
Где hero - юнит которого хотим оглушить
А dur - время оглушения в секундах
Чтобы узнать в стане ли юнит, достаточно проверить состояние функцией IsUnitPaused, тут конечно да, есть пересечения с простой паузой, но можно этим просто пренебречь.
В будущем планируется:
- Добавить индикатор стана в виде прогресс бара, для оглушенного юнита или же просто отображать секунды через текстаг
- Добавить очищение от оглушения, ну скажем сильное развеивание достаточно редкая вещь, как только надобность появиться - сразу сделаю
Ред. noyl
Ну или если стан который чел получил по времени меньше, чем текущий(который остался), то заменить, иначе - нет.
Ред. PROSHELDOTU
Тут суть в другом - имеет ли смысл этот метод, если в мапе энивэй используется дамми для каких-нибудь других целей? Если используется дамми для чего-то ещё, то просто тогда сделать стан от дамми и не париться
Тем более, что можно параметры абилки менять щас, т.е. можно перед кастом стана от дамми, установить ему нужную длительность стана и всё
Ред. pro100master
SetUnitStun(unit, 10)
то счетчик будет обновлять
10 раз установит паузу
SetUnitStun(unit, 4)
Снимает 6 раз паузу
Ред. GetLocalPlayer
Bornikkeny, бафф в статусе пусть идёт лесом, в 1 карте я смог все эффекты повторить без ваших дамми кастов, поэтому нет смысла вообще поддерживать всякие яды и замедлялки сидите и дальше в своем РО.
И если уж решил делать кастом стан - как насчет попутно реализовать стандартный диспел для последнего? При смерти или при еще каких действиях.
Насколько помню - эта нативка работа рук китайцев и отличается лишь отключенным сайленсом у дефолтной паузы, хз что оно еще делает, не ломает ли длительность баффов и прочего?
quq_CCCP:
Зачем мне вообще париться над длительностью бафов, если у меня нет бафов в принципе, ммм?
При смерти добавлено всё, юнит очищается от стана, ты написал комментарий даже не читая текст, найс просто
Если юнит сменит форму во время стана, визуалка отвалится, поэтому её крепят к абилке - баффу.
Обычный стан болт будет быстрее на дистанции за счёт того, что не требует таймера 0.1 и выполнения кода после броска. Для коротких станов скорость не имеет значения
Ну и если использовать триггерный стан на кастера в момент каста, то кд не начнётся, в отличие от н классического болта.
Во тебе пространство для улучшений)
DracoL1ch: