Добавлен PT153
У меня есть юнит Wisp, который строит здания. Wisp - стандартная модель Wisp, как у эльфов. Раса моего Wisp - Нежить, и после постройки здания Wisp начинает проигрывать анимацию Stand Work. Меня это раздражает, поэтому я решил исправить это триггерно.
С: Каждые 0,05 секунд.
Д: set bj_wantDestroyGroup = true
Выбрать всех юнитов в группе (Тип юнита равно Wisp) и делать Проиграть Анимацию Выбранного юнита - Stand Animation.
С: Каждые 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)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. ssbbssc
кода нет - ответа нет