28

» WarCraft 3 / Проверка способности

Третий триггер
Отряд - 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, видел мою реализацию тут (там есть ссылка на слове "это")? Глянь её, она точно без ошибок.
28

» WarCraft 3 / Проверка способности

8gabriel8:
Пытался застакать, используя разные яды, но всегда висел (не буферизируется), что с чем надо накладывать, чтобы второй бафф висел?
Яд должен быть один, нужно его настройки поменять.
Прочитай это и это.

UPD: я уже точно не помню, у меня всё уже давно триггерное)
28

» WarCraft 3 / Проверка способности

EHP_Sequence, вот это должно работать, вставишь уменьшение брони и поменяешь в глобальных константах ReduceArmorAbility и ReduceArmorBuff на нужные тебе.
8gabriel8:
А вот помимо ошибки в третьем триггере, ещё и бафф (буфферизируется), его же не висит на юнитах отравленных. Тоже не знаю, почему он присутствует в редакторе, но предполагаю, что он для версии Reign of Chaos, типа там иначе работает яд, и чтобы была своя версия яда у юнитов в каждой версии игры, просто поставили юнитам оба типа баффов, а каждая версия отключает другой.
Бафф зависит от того, стакаются ли эффекты от разных наложителей со способностью яда или нет. Если стакаются (буфферизуется), то висит этот бафф, если нет, то висит другой. Стакаемость зависит от настройки способности. Узнать, что же висит, можно по изменению имени баффа.
Загруженные файлы
28

» WarCraft 3 / Проверка способности

Второй триггер можно сделать проще: проверку на отсутствие в группе поставить в условия триггера.
Ошибка в третьем триггере: первое условие, (Picked Unit has buff рано Нет) должно быть.
28

» WarCraft 3 / Проверка способности

Не знаю, как в 1.30, но в 1.26 Воскрешение не поднимает тех же юнитов, а создаёт на их месте таких же новых.
Хм, тогда ладно. Впрочем, это немного логично, ведь воскрешение вызывает срабатывание события Summons a Unit.
28

» WarCraft 3 / Проверка способности

А что с героями не так?
А так да, такой триггер не нужен.
UPD: понял.

Мёртвых юнитов лучше не удалять из группы, потому что их можно воскресить, и для них событие будет зарегистрировано 2 раза. Им нужно также восстановить назад броню, а удалить уже когда они разложатся.
Вот из-за этого я предпочитаю способ с добавлением событий на всех юнитов, что можно атаковать, сразу, а не по ходу игры.
28

» WarCraft 3 / Проверка способности

Почему-то не работает все равно.
Скриншоты триггера, пожалуйста.
28

» WarCraft 3 / Можно ли уменьшить счётчик юнитов на экране статистики?

И просить что-то сделать даммика для нейтрального игрока через специальные нативки.
28

» WarCraft 3 / Можно ли уменьшить счётчик юнитов на экране статистики?

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

» WarCraft 3 / Проверка способности

8gabriel8:
Так в первом триггере условие, что атакованный не должен быть в Poisoned_units.
А по поводу юнитов как-то задавал вопрос, мне сказали, что типа (Attacked unit) утекает и остальные тоже.
Тогда хорошо.
Они не утекают, эти функции возвращают юнитов сразу, они все являются константными нативками.
28

» WarCraft 3 / Проверка способности

8gabriel8, у тебя выходит, что каждый раз, когда юнит атакован, добавляется событие. Ты уже как-то описывал решение этой проблемы через группу.
(Picked unit), (Triggering unit), (Attacked unit)
Они не вызывают утечки, вызывают утечки точки и неудалённые группы.

В Poisoned units лучше добавлять во втором триггере.

Тут можно обойтись 1 группой Reduced Armor и проходить только по ней.
28

» WarCraft 3 / vJass + cJass

ScopteRectuS:
Всё, что есть в vJass есть и и в cJass. Не всё, что есть в cJass есть в vJass.
cJass даёт только оптимизацию скрипта, он не даёт новых больших фич без vJass, типа структур, .execute(), .evaluate() и прочее.

У меня из-за включённого cJass были некоторые проблемы с сохранением, потому отключил его. Начал я с прочтения оригинала мануала vJass, про cJass прочитал позже, когда бОльшая часть кода уже была написана, потому и не переходил на него.

А вообще, на сайте есть мануалы по cJass и vJass, читаешь их. Так-то их можно комбинировать, но осторожно.

А ещё почитай предложенные ответы от бота.
28

» WarCraft 3 / Проверка способности

Если есть возможность подождать вечера понедельника, то сделаю наработку с комментариями. Лучше мне в понедельник об это напомнить.
28

» WarCraft 3 / Группа или как правильно сделать pick

потому что тебе так или иначе нужна группа
Мне группы не нужны, потому я всё делаю в фильтре.
PT153:
Вместо GetTriggerUnit нужно поставить GetSpellUnit().
GetSpellEffectUnit()
Вот это никогда работать небудет, т.к все Get функции такого типа, работают только в потоке триггера который сработал на соответствующие событие, если их вызвать вне потока триггера - они вернут null.
Pashka5, вот это совершенно верно.
28

» WarCraft 3 / Способность "Пустить корни"

Всё проще. Убери способность. Глянь в модели, какой тег у закопанной анимации. Этот тег пропиши в требованиях к анимациям в Редакторе объектов дереву (как у рыцаря или ратуши эльфов).

Это также можно сделать триггерно.
28

» WarCraft 3 / Проверка способности

Событие: применения способности
У него пассивка.
Действие: отряд выбрать каждого юнита в зоне игровой карты с условием, если совпадающий юнит = юнит цель
А это зачем, ведь можно сразу к цели всё применить.
28

» WarCraft 3 / Группа или как правильно сделать pick

Нафиг это делать в фильтре?
А зачем добавлять что-то в группу, чтобы её потом чистить и прочее.
Замеры лича, которыми он делился на HIVE, говорят, что ForGroup() медленнее перебора цикла.

Вместо GetTriggerUnit нужно поставить GetSpellUnit().
28

» WarCraft 3 / Проверка способности

8gabriel8:
Вообще-то есть. Урон ещё не нанесён, но бафф уже висит.
Да? Значит всё ещё проще.
Он же учится.
Лучше сразу учиться делать правильно. Событие "Юнит атакован" нагружает игру, так как срабатывает очень часто, особенно если в действиях что-то тяжёлое. У меня из-за него моя тдшка лагала. Поставил условие, что для каждого юнита это событие срабатывает не чаще 2х раз в секунду, лаги исчезли.
28

» WarCraft 3 / Проверка способности

Вместо "Юнит атакован" нужно использовать событие "Юнит получает урон" (нужно регистрировать каждого юнита) с условием (Получаемый урон больше 0 И Источник урона имеет способность Х).
При получении урона баффа ещё нет, потому добавляем в группу.ApplyPoison.
Другой триггер каждую долю секунды проходит по ApplyPoison, каждому снижает армор, удаляет из группы ApplyPoison, добавляет в группу Poisoned. Условие триггера: кол-во юнитов в ApplyPoison больше 0.
Третий триггер каждую долю секунду проверяет наличие баффа на юнитах в Poisoned. Если баффа нет, возвращаем армор, удаляем из группы. Условие триггера: кол-во юнитов в Poisoned больше 0.
Четвёртый триггер при смерти юнита удаляет его из групп ApplyPoison и Poisoned.
28

» WarCraft 3 / Группа или как правильно сделать pick

Принятый ответ
Первый вариант должен работать, если фильтр относится к группе.
IsUnitType() == false замени на not IsUnitType().