Ancient Apparition - I scream, you scream

Старый добрый холодьник «Бирюса» (кузен «Бирюзы» по отцовской линии) появился в доте давно. Первое время его брали из-за дико имбалансных навыков (а кого нет?), сейчас из про-игр он почти совсем пропал. Это не значит, что он юзлес — просто все скилы требуют выполнения каких-либо условий. А "если" всегда вредят игре.




Cold feet

ID: A1MG
Основан на Channel, что обеспечивает прицел и иконку.

При касте проверяет, есть ли у цели баф от линки, и отменяется, если такой есть. Все, что идет после проверки, никак не реагирует на линку, даже если она включилась через долю секунды после.

Изначально планировалось, что иконка «центра», от которого нужно убежать юниту, будет видна только союзникам AA, но потом сделали её видимой всем. На цель надевается специальная анимация и добавляется баф-иконка, а также заводится периодический (0.1с) триггер, также реагирующий на смерть юнита.

Триггер тикнул. Если юнит умер, или он отошел от метки на 765, либо потерял баф — то уничтожить визуальные эффекты и закрыть триггер.
Урон наносится на 8, 16, 25 и 34 тике. Т.е. с момента каста — на 0.8, 1.6, 2.5 и 3.4 секунде по X урона.

На 40 тике создается дамми, который кидает болт в цель, обеспечивая стан. При этом работают стандартные правила сложения станов — урон наносят оба, действует тот, что длиннее, анимация выбирается на основании этих данных. Т.к. у стана Cold Feet особая анимация (ледяной куб), то она может перекрыть(ся) другую (стандартную воронку) анимацию.

Урон от тика абилки:
25 + 12.5 * Lvl
Всего урона за 4 тика: 150 / 200 / 250 / 300 маг. урона


Ice Vortex

ID: A1HS
Основан на Blizzard, что обеспечивает AoE и иконку.

Создает в указанной точке дамми (то, что мы видим), которому выдается 16 секунд жизни. Триггер отслеживает, когда дамми умрет, а также каждую 0.1 секунду проводит опрос состояния.

При опросе собираются все враги в радиусе 300, попадающие под условия:
Враг, без маркера, не здание, не древний, но мишка
Проверка, чтобы не воздействовать на маг. иммунных, проводится дальше.

Всем, кто попал в группу, выдается скрытая книжка, в которой лежит аура замедления и абилка, увеличивающая входящий урон от магического урона. В цифрах все совпадает с теми, что заявлены в описании абилки.

При каждом следующем опросе юниты, собранные в эту группу, «чистятся», чтобы невозможно было остаться с этими абилками после выхода из зоны действия.

Абилки добавляются не «впаиванием» — только сама книжка «впаяна». Это значит, что любое превращение приведет к потере содержимого книжки, но не её самой. В коде стоят проверки только на её наличие — так определяется, нужно ли обрабатывать юнита снова или нет. Например, тролль может встать прямо на Vortex и сменить форму. При этом на него перестанет действовать аура замедления, и бонусного урона от магии тоже не будет. Он даже может перебегать между ними — при условии, что он ни разу не выйдет за АоЕ, его не будет замедлять.


Chilling Touch

ID: A1HQ
Основан на Channel, что обеспечивает АоЕ прицел и иконку.

При касте группирует юнитов в радиусе 550:
Герой, союзник, без маркера, не здание, живой, не эншент, но мишка
В эту группу добавляется герой, скастовавший заклинание.

Каждому из группы выдается аура, обеспечивающая иконка, и абилка на -20 скорости атаки. Сохраняется, сколько атак может сделать юнит с действующим бафом (2 + уровень абилки). Каждому также выдается модный спецэффект на руки.

Триггер ждет 30 секунд, смерти юнита или атаки по кому-то.
Когда юнит атакован одним из носителей Chilling Touch, другой триггер ждет получения целью урона от атакующего либо самоуничтожается через 2 секунды, если атака не была закончена. Если атаку удалось завершить, и урон > 1, то наносится дополнительный урон и снижается счетчик количества ударов.

При замахе включается кулдаун действия абилки (0.4 секунды). Из-за этого можно не получить бонусного урона, если герой начал атаковать крипа на автоатаке, а потом его сразу же перенаправили на другого юнита — замах начнется ещё во время перезарядки способности.

Избавиться от дебафа невозможно — нужно истратить все заряды или умереть.


Ice Blast

ID: A1MI -> A2QE

Основан на Channel, что обеспечивает иконку и прицел.

При касте создает юнита-героя, у которого включена опция «не показывать в списке героев». С точки зрения игры он — абсолютно нормальный герой, поэтому он ворует опыт, если рядом с ним умирают враги. Впрочем, за ассисты он бонус получить не может — стоит в исключениях. Если за компом сидит враг кастера, то юниту выдается альтернативная (пустая по умолчанию) иконка.

Отдельный триггер следит за таймером, отсчитывая каждые 0.02с, следит, жив ли кастер, и ждет, когда кастер нажмет «выпустить ульт».

При каждом тике триггера герой-ульт передвигается на 30 в направлении каста. Передвижение мягкое, что позволяет регулировать скорость движения ульты самостоятельно. Просто прикажи этому герою-ульте идти в нужную точку, чтобы он летел к ней еще быстрее, либо прикажи ему идти обратно, чтобы замедлить. Конечно, у него минимальная скорость движения (100), но на больших расстояниях разница хорошо заметна.

Если герой-ульт вдруг воткнулся в границу карты, или умер кастер, или был отдан приказ «освободить ульт», то героя-ульту сразу убирают, вместо него создают визуальный эффект, видимый только союзникам кастера. Открывается туман в 500 АоЕ вокруг точки приземления.

Высчитывается радиус поражения по формуле:
25+250+50*Time;
где Time — длительность между вылетом дамми-героя и высвобождением ульты. Если значение больше 1000, то устанавливается 1000.
Затем создается второй дамми-ульт. Новый триггер следит за другим таймером, формула которого нетривиальна:
t = 2.0 / (D / 30)
; где D — расстояние между кастером и точкой приземления. t не может быть больше 0.04 (актуально при D <= 150)
В длинных бросках таймер оооочень маленький (0.01)

Новый дамми-юнит двигается с той же скоростью 30 за каждый тик, но, благодаря ооочень быстрому таймеру, он может достигнуть конечной станции вдвое быстрее.

Пока он только летит к точке назначения, вокруг каждой остановки таймера дамми собирает юнитов вокруг:
Враг, без маркера, не здание, не древний, но мишка
И применяет к ним эффект заморозки.

Когда же приходит пора приземляться в конечную точку, собираются юниты в ранее подсчитанном радиусе по вышеуказанному фильтру. Для каждого включается заморозка хп, а потом наносится 150+100*Уровень урона.

Эффект отморозки
Действует только на героев, не иллюзии, не клоны Meepo и не клон Zetа.

Каждой жертве создается персональный триггер, который следит за событием «юнит получает урон». В юнита впаиваются визуальный эффект и статус-аруа «под действием ульты». В отдельные ячейки памяти, индивидуальные для каждого игрока, записываются: длительность работы ульты (8/9/10 или 17), текущее здоровье юнита, его мана, уровень прокачки ульты и, наконец, кто кинул ульт.

Представьте себе массивы информации по формату «Номер игрока -> инфа». Так и работает весь принцип заморозки. В одном массиве хранятся хп, в другом — мп, в третьем — время, когда ульта закончится. Например, зеленый AA (№11) попал ультом с аганимом по синему (№1) игроку в 12:00. В массивах будет:
Длительность: 12*60 + 17;
Кастер: AA;
Хп: текущее хп этого юнита;
Мп: текущее мп этого юнита.

Из этой системы понятно, почему на клонов мипо система не работает — фрог поленился изобретать что-то большое, и остановился на самом простом решении «один игрок — один герой». Трудно его за это винить (я и сам не люблю создавать велосипеды), но это действительно сильное преимущество для Meepo.

При каждом срабатывании триггера (на получение урона) идет проверка. Если юнит потерял дебаф ульт, то триггер выключается.

Иначе, если источник урона — не сам юнит, и на момент срабатывания триггера его хп меньше, чем разрешено, и при этом на нем нет Grave от Dazzle, то с него снимают все эффекты ульта, астрал, все бафы и наносят 10 млн физического урона от лица дамми, принадлежащего тому, кто нанес урон.

Собственно, заморозка
С момента, как AA был пикнут, создается триггер, который тикает каждые 0.1 секунды. При первом срабатывании он сохраняет в ячейки памяти, соответствующие игроку, значения хп и маны — по 9999 каждого.

Затем, все последующие срабатывания, он начинает проверку. Проходя по массиву героев игроков, он проверяет, не висит ли на них дебаф ульты и действителен ли он. Если бафа нет, либо его длительность, согласно ранее записанному значению, кончилась, то значение массива «ульта закончится в» обнуляется.

Если юнит находится под бафом, и ульт все еще работает, то:
  • если хп юнита меньше, чем было записано ранее, то записать новое значение;
  • то же самое для мп юнита;
  • установить хп юнита на записанное значение;
  • в отдельном счетчике проверяется, является ли этот тик кратным 10. Если так, то нанести 12.5 / 20 / 32 урона от лица ранее сохраненного кастера ульты.

Если юнит умер, то счетчики обнуляются.

Что нужно понять
  • Умереть можно только от события урона — только в том триггере проверяется, упало ли здоровье юнита до нужного предела. Но, т.к. другой триггер отсчитывает каждые 10 тиков, то урон будет всегда — вопрос в его частоте.
  • Событие «юнит получает урон» срабатывает еще ДО того, как он получит урон. Об этом я писал еще в ульте Abaddon. Это значит, что ульт лины может оставить 100 хп из 2000 (явно меньше лимита), но заморозка не добьет юнита — на момент проверки у него было (100+ульт лины) хп, что превышало планку. Но вот любой следующий урон сразу убьет его.
  • Sikle пытался добивать врагов, бегущих от него под ультой АА, при помощи Ring of Basilius. Там же 0 урона от Fan of knives, который не только хилки хорошо сбивает, но и подсобить с воровством убийства может.
  • Т.к. финальный удар происходит сразу ПОСЛЕ снятия всех бафов, связанных с ультом, от него можно уклониться неуязвимостью. Например, Naix может залезть в крипа, Storm и Juggernaut — использовать ульт, Tuskar — свернуться в снежок. После первой попытки нанести урон второй уже не будет, т.к. бафов ульты не останется. Нужно лишь точно поймать момент.
  • Баф ульты сбрасывается триггерными диспеллами, но не стандартными диспелами (это всё, что есть у Abaddon). Т.е. щит и ульта не спасут от Blasta, но сларк легко сбросит его с себя. #fuckthelogic.
  • Заморозка не может среагировать на триггерное лечение, если хп юнита в интервалах не менялись. Так, если Lanaya будет под своим щитом, то любой урон, который он впитает, будет тут же вылечен обратно — и никакая заморозка не заметит разницы.
  • Из-за того, что заморозка сделана интервалами, можно увидеть дрожание полоски хп при лечении.

31 комментарий

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.