Отряд - Pick every unit in Poisoned_units and do (Actions)
.Цикл - Действия
..Multiple Functions If (All Conditions are True) then do (Then Actions) else do (Else Actions)
...Если - Условия
....((Picked unit) has buff Яд (не буферизуется) (паук1)) равно Нет
....((Picked unit) is in Reduced_armor) равно (==) Да
...То - Действия
....Set Armor of (Picked unit) to ((Armor of (Triggering unit)) + 6.00))
....Отряд - Remove (Picked unit) from Reduced_armor
...Иначе - Действия
....Multiple Functions If (All Conditions are True) then do (Then Actions) else do (Else Actions)
.....Если - Условия
......((Picked unit) is alive) равно (==) Нет
......((Picked unit) is in Reduced_armor) равно (==) Да
.....То - Действия
......Отряд - Remove (Picked unit) from Reduced_armor
......If (((Picked unit) is Герой) равно (==) Нет) then do Отряд - Remove (Picked unit) from Poisoned_units else do (Боевая единица - Set Armor of (Picked unit) to ((Armor of (Picked unit)) + 6.00))
.....Иначе - Действия
Тут есть проблема, что очищение группы регистрации происходит в случаях: когда юнита нет в группе с низким армором, когда у юнита есть бафф, когда присутствуют сразу первые два случая. Но прикол в том, что мы вновь проверяем наличие в группе с низким армором, а если юнит мёртв, то и баффа у него нет. То есть очищение не происходит. В своей реализации я исправил. EHP_Sequence, видел мою реализацию тут (там есть ссылка на слове "это")? Глянь её, она точно без ошибок.
EHP_Sequence, вот это должно работать, вставишь уменьшение брони и поменяешь в глобальных константах ReduceArmorAbility и ReduceArmorBuff на нужные тебе. 8gabriel8:
А вот помимо ошибки в третьем триггере, ещё и бафф (буфферизируется), его же не висит на юнитах отравленных. Тоже не знаю, почему он присутствует в редакторе, но предполагаю, что он для версии Reign of Chaos, типа там иначе работает яд, и чтобы была своя версия яда у юнитов в каждой версии игры, просто поставили юнитам оба типа баффов, а каждая версия отключает другой.
Бафф зависит от того, стакаются ли эффекты от разных наложителей со способностью яда или нет. Если стакаются (буфферизуется), то висит этот бафф, если нет, то висит другой. Стакаемость зависит от настройки способности. Узнать, что же висит, можно по изменению имени баффа.
Второй триггер можно сделать проще: проверку на отсутствие в группе поставить в условия триггера.
Ошибка в третьем триггере: первое условие, (Picked Unit has buff рано Нет) должно быть.
А что с героями не так?
А так да, такой триггер не нужен.
UPD: понял.
Мёртвых юнитов лучше не удалять из группы, потому что их можно воскресить, и для них событие будет зарегистрировано 2 раза. Им нужно также восстановить назад броню, а удалить уже когда они разложатся. Вот из-за этого я предпочитаю способ с добавлением событий на всех юнитов, что можно атаковать, сразу, а не по ходу игры.
Так в первом триггере условие, что атакованный не должен быть в Poisoned_units.
А по поводу юнитов как-то задавал вопрос, мне сказали, что типа (Attacked unit) утекает и остальные тоже.
Тогда хорошо.
Они не утекают, эти функции возвращают юнитов сразу, они все являются константными нативками.
Всё, что есть в vJass есть и и в cJass. Не всё, что есть в cJass есть в vJass.
cJass даёт только оптимизацию скрипта, он не даёт новых больших фич без vJass, типа структур, .execute(), .evaluate() и прочее.
У меня из-за включённого cJass были некоторые проблемы с сохранением, потому отключил его. Начал я с прочтения оригинала мануала vJass, про cJass прочитал позже, когда бОльшая часть кода уже была написана, потому и не переходил на него.
А вообще, на сайте есть мануалы по cJass и vJass, читаешь их. Так-то их можно комбинировать, но осторожно.
Вот это никогда работать небудет, т.к все Get функции такого типа, работают только в потоке триггера который сработал на соответствующие событие, если их вызвать вне потока триггера - они вернут null.
Всё проще. Убери способность. Глянь в модели, какой тег у закопанной анимации. Этот тег пропиши в требованиях к анимациям в Редакторе объектов дереву (как у рыцаря или ратуши эльфов).
А зачем добавлять что-то в группу, чтобы её потом чистить и прочее.
Замеры лича, которыми он делился на HIVE, говорят, что ForGroup() медленнее перебора цикла.
Вместо GetTriggerUnit нужно поставить GetSpellUnit().
Вообще-то есть. Урон ещё не нанесён, но бафф уже висит.
Да? Значит всё ещё проще.
Он же учится.
Лучше сразу учиться делать правильно. Событие "Юнит атакован" нагружает игру, так как срабатывает очень часто, особенно если в действиях что-то тяжёлое. У меня из-за него моя тдшка лагала. Поставил условие, что для каждого юнита это событие срабатывает не чаще 2х раз в секунду, лаги исчезли.
Вместо "Юнит атакован" нужно использовать событие "Юнит получает урон" (нужно регистрировать каждого юнита) с условием (Получаемый урон больше 0 И Источник урона имеет способность Х).
При получении урона баффа ещё нет, потому добавляем в группу.ApplyPoison.
Другой триггер каждую долю секунды проходит по ApplyPoison, каждому снижает армор, удаляет из группы ApplyPoison, добавляет в группу Poisoned. Условие триггера: кол-во юнитов в ApplyPoison больше 0.
Третий триггер каждую долю секунду проверяет наличие баффа на юнитах в Poisoned. Если баффа нет, возвращаем армор, удаляем из группы. Условие триггера: кол-во юнитов в Poisoned больше 0.
Четвёртый триггер при смерти юнита удаляет его из групп ApplyPoison и Poisoned.
Ред. PT153
» WarCraft 3 / Проверка способности
EHP_Sequence, видел мою реализацию тут (там есть ссылка на слове "это")? Глянь её, она точно без ошибок.
Ред. PT153
» WarCraft 3 / Проверка способности
Прочитай это и это.
Ред. PT153
» WarCraft 3 / Проверка способности
8gabriel8:
» WarCraft 3 / Проверка способности
Ошибка в третьем триггере: первое условие, (Picked Unit has buff рано Нет) должно быть.
» WarCraft 3 / Проверка способности
Ред. PT153
» WarCraft 3 / Проверка способности
А так да, такой триггер не нужен.
UPD: понял.
Вот из-за этого я предпочитаю способ с добавлением событий на всех юнитов, что можно атаковать, сразу, а не по ходу игры.
» WarCraft 3 / Проверка способности
Ред. PT153
» Администрация XGM / Глючит лента новостей при обновлении ресурса
» WarCraft 3 / Можно ли уменьшить счётчик юнитов на экране статистики?
Ред. PT153
» XGM Конкурсы / Warcraft III Mini-Game Contest-2018
» WarCraft 3 / Можно ли уменьшить счётчик юнитов на экране статистики?
» WarCraft 3 / Карта Троли против эльфов...
» WarCraft 3 / Проверка способности
Они не утекают, эти функции возвращают юнитов сразу, они все являются константными нативками.
Ред. PT153
» WarCraft 3 / Проверка способности
Ред. PT153
» WarCraft 3 / vJass + cJass
» WarCraft 3 / Возможно ли триггерно сделать недоступные апгрейды - доступными?
» WarCraft 3 / Вопрос по триггерам.
» WarCraft 3 / Проверка способности
» WarCraft 3 / Группа или как правильно сделать pick
PT153:
» WarCraft 3 / Способность "Пустить корни"
» WarCraft 3 / Проверка способности
» WarCraft 3 / Группа или как правильно сделать pick
Замеры лича, которыми он делился на HIVE, говорят, что ForGroup() медленнее перебора цикла.
» WarCraft 3 / Проверка способности
Ред. PT153
» WarCraft 3 / Проверка способности
При получении урона баффа ещё нет, потому добавляем в группу.ApplyPoison.
Другой триггер каждую долю секунды проходит по ApplyPoison, каждому снижает армор, удаляет из группы ApplyPoison, добавляет в группу Poisoned. Условие триггера: кол-во юнитов в ApplyPoison больше 0.
Третий триггер каждую долю секунду проверяет наличие баффа на юнитах в Poisoned. Если баффа нет, возвращаем армор, удаляем из группы. Условие триггера: кол-во юнитов в Poisoned больше 0.
Четвёртый триггер при смерти юнита удаляет его из групп ApplyPoison и Poisoned.
» WarCraft 3 / Группа или как правильно сделать pick