Пока идея только такая - в определяющей функции давать ему что-то типа виндволка/берсерка с действием 0.1 сек. и нестандартным баффом и приказывать юзать.
Потом проверить наличие этого баффа.
Под сайленсом он абилу юзнуть не сможет, следовательно, баффа не появится, значит, раз баффа нет - он под салом.
Бафф потом сразу удалить вместе с абилой.
Но тут целая куча проблем (терпимых по отдельности, но вместе уже достаточно неприятных):
  1. Юнит может быть не только под салом, но и, например, под станом. Тогда он тоже не юзнет виндволк/берсерк.
  2. Собьется нормальный виндволк/берсерк, если у него такой есть.
  3. Стриггерятся все триггеры на то, что юнит юзает абилу.
  4. Это просто достаточно геморройно в реализации.
Есть идеи попроще? Или мб в мемхаке что есть?

в структуре юнита счетчик есть, тащем-та
RMem(unit+0x1D0)
>0 == сайленс
`
ОЖИДАНИЕ РЕКЛАМЫ...
20
А зачем тебе это вообще? Приказывать кастовать что-то в обход сайленса? Для этого есть руны.
Простой способ здесь — последовательно проверять все салящие баффы.
И да, в памяти полюбому есть количество сайленсов действующих на юнита (или на способность, я не знаю как там это сделано). Но я не в курсе конкретики.
Элсо — можешь проверить можно ли давать приказ на каст способности в сайленсе(отлавливается ли он). Через стан точно можно отловить приказ отмены щита пехотинца, например.
21
В принципе, да, БД по салящим баффам мб лучше будет, их не так уж много, новые нетрудно будет добавить и, главное, это абсолютно безошибочно, то есть остаётся только проблема 4, а это приемлемо, спасибо
Зачем надо? Да очень просто, допустим, герой типа сайленсера с пассивкой "наносит больше урона врагам, которые под молчанками".
О, за приказ спасибо, хорошая идея! Проверю
32
У каждой способности есть счетчик сайленсов, они могут быть разнородными.
Узнать его можно с помощью мемхака.
function GetAbilityDisabledCount takes integer pAbility returns integer
        return Memory[pAbility / 4 + 15]
    endfunction
Если вернет 0 то сала нету, если 1 или больше - на юнита наложен один из сайленсов, для проверки достаточно вручить юниту канал (какой есть, ваще без настроек) и проверять .
21
Т. е. даю абилу "ЕСТЬ ЛИ МОЛЧАНКА", считаю счетчики сала на ней, если их 0 - юнит без сала, если > 0 - под салом, убираю абилу "ЕСТЬ ЛИ МОЛЧАНКА". Ятп, она даже глазу заметна не станет. Идеально. Благодарю.
16
в структуре юнита счетчик есть, тащем-та
RMem(unit+0x1D0)
>0 == сайленс
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.