Добавлен
У меня есть юнит Wisp, который строит здания. Wisp - стандартная модель Wisp, как у эльфов. Раса моего Wisp - Нежить, и после постройки здания Wisp начинает проигрывать анимацию Stand Work. Меня это раздражает, поэтому я решил исправить это триггерно.
С: Каждые 0,05 секунд.
Д: set bj_wantDestroyGroup = true
Выбрать всех юнитов в группе (Тип юнита равно Wisp) и делать Проиграть Анимацию Выбранного юнита - Stand Animation.
Когда я красный игрок, то триггер работает, но вот когда я играю не за красного, то триггер не работает. Почему не работает триггер? И как убрать проигрывание анимации?

Триггер не работает, потому что устанавливается флаг bj_wantDestroyGroup и Units of type <...> криво сделана.
Оригинальный триггер на самом деле вот такой код.
set bj_wantDestroyGroup = true
call ForGroupBJ( GetUnitsOfTypeIdAll(unit_type), function GroupActions)
Флаг bj_wantDestroyGroup устанавливается для того, чтобы его считала функция ForGroupBJ и уничтожила созданную группу. Но GetUnitsOfTypeIdAll вызывается первее. Эта функция реализована через последовательный вызов GroupEnumUnitsOfPlayer для каждого игрока и добавления результата в общую группу посредством GroupAddGroup. Функция GroupAddGroup тоже работает с флагом bj_wantDestroyGroup. Она считывает установленный флаг и уничтожает группу с результатом GroupEnumUnitsOfPlayer. И это всё ломает, ведь группа с результатом для игрока затем очищается и снова используется для другого игрока. Таким образом после первого игрока группа уничтожена, отчего юниты других игроков никуда не добавляется.
В результате общая группа содержит юнитов только красного игрока. При этом общая группа не будет уничтожена, ведь флаг bj_wantDestroyGroup уже поглощён, что вызывает утечку.

Проигрывание анимации убирается очень легко. Надо в триггере с событием начала строительства подождать 0 секунд/запустить таймер в 0 секунд и после истечения удалить тег анимации work. Так сделано в WispTD.
call AddUnitAnimationProperties(builder, "work", false)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
43
Может проще будет после постройки здания сделать reset animation - на trigger unit
28
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Попробую. А почему этот триггер не работает? Мне кажется, что дело в выбранной группе. Может, стоило выбрать группу Юниты в игровой области, а после в ифе указать тип юнита?
12
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
28
Astra:
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
Во время инициализации карты в стартовой позиции игрока создается 1 висп.
Заменил триггер на другой, все заработало.
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Увы, не работает.
Одним словом, я просто взял модель виспа, удалил у него все анимации, кроме stand, импортировал в карту, прописав путь к файлу, как к файлу модели оригинального виспа.
28
Триггер не работает, потому что устанавливается флаг bj_wantDestroyGroup и Units of type <...> криво сделана.
Оригинальный триггер на самом деле вот такой код.
set bj_wantDestroyGroup = true
call ForGroupBJ( GetUnitsOfTypeIdAll(unit_type), function GroupActions)
Флаг bj_wantDestroyGroup устанавливается для того, чтобы его считала функция ForGroupBJ и уничтожила созданную группу. Но GetUnitsOfTypeIdAll вызывается первее. Эта функция реализована через последовательный вызов GroupEnumUnitsOfPlayer для каждого игрока и добавления результата в общую группу посредством GroupAddGroup. Функция GroupAddGroup тоже работает с флагом bj_wantDestroyGroup. Она считывает установленный флаг и уничтожает группу с результатом GroupEnumUnitsOfPlayer. И это всё ломает, ведь группа с результатом для игрока затем очищается и снова используется для другого игрока. Таким образом после первого игрока группа уничтожена, отчего юниты других игроков никуда не добавляется.
В результате общая группа содержит юнитов только красного игрока. При этом общая группа не будет уничтожена, ведь флаг bj_wantDestroyGroup уже поглощён, что вызывает утечку.

Проигрывание анимации убирается очень легко. Надо в триггере с событием начала строительства подождать 0 секунд/запустить таймер в 0 секунд и после истечения удалить тег анимации work. Так сделано в WispTD.
call AddUnitAnimationProperties(builder, "work", false)
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.