есть ли функционал на удаление событий указанного триггера?
если нет - то насколько дорогая операция по удалению триггера и созданию нового с добавлением всех действий и новых событий?
Будут ли формироваться утечки, если каждые 20-30 секунд таким образом создавать заново триггер и добавлять в него события на смерть 10-12 воинов (10-12 событий)

Принятый ответ

Cancel, юзай общие события лучше
а юнитов проверяй в условии
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
6 лет назад
0
Похожие вопросы:

ответ
надо периодически проверять, а не верить варкрафтовому событию. это одно из самых вредных событий в игре, его почти никто не использует в здравом уме
ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
наличия триггера на получение урона для каждого юнита
так делать нельзя
это же полный бред
просто добавляем событие к уже существующему триггеру вот и всё
нормального сборщика мусора в варе нет и скорее всего не будет(если близы даже рб поленились убрать то о нормальном gc можно забыть)
так же не стоит забывать что сборщик мусора срабатывает не сразу
если мне не изменяет память то save сохраняет объекты и значения переменных
а при загрузке восстанавливает связи (заносит значения в переменные, регистрирует события и прочее)
так что всякий мусор просто не проходит
а вообще лучше забей на это
в варе есть более серьёзные утечки от которых нельзя избавиться
например руны
+ создание и удаление триггеров вредит намного больше чем пара сотен килобайт памяти
да и вряд ли у тебя за игру будет 50к юнитов
ответ
вариант через define native-функции, то есть ее подмена для последующего отлова как события изменения реальной переменной, не совсем подходит
Даже интересно, почему?
Как уловить момент очищения handle боевой единицы?
Как вариант - периодическая проверка координат юнита по его хендлу, стали равны 0.0 / 0.0 - юнит был удалён.
Как уловить момент удаления через функцию RemoveUnit?
Вызвать нужную функцию сразу после вызова RemoveUnit, очевидно.
ответ
События триггера никак нельзя удалить, можно только удалить триггер (с кондишенами и акшенами).
А кстати вот - xgm.guru/p/wc3/venomanser
Будет несомненно полезно, как правильно удалять триггеры.
Да и вовсе полезно для общего развития.

0
13
6 лет назад
Отредактирован Cancel
0
в одной теме прочёл "событие удаляется само когда объекта завязанного на него не существует" - это правда? Не будет утечек если за игру на один триггер будет подвешено 5000+ событий на смерть юнитов, при условии что одновременно будет существовать не больше 12 из них?
0
16
6 лет назад
0
если у тебя события завязаны на объект, логично, что удаленный объект никогда не сможет их вызвать. Это не отменяет того, что в памяти они остаются.
0
32
6 лет назад
0
Сами события не удаляются, если остается связанный с ними объект, используйте по возможности глобальные события на всех юнитов игрока, раз в 30 мин, пересоздавайте ваших героев если на них так дохрена событий.
0
13
6 лет назад
0
quq_CCCP, это не герои, это юниты, и они постоянно пересоздаются. Означает ли это что когда юнит удаляется - удаляются и все события с ним связанные? т. е. не будет захламляться память?
0
32
6 лет назад
0
Cancel, разумеется удаляются, я даже тестил на своей карте, там аналоги форж спиритов Инвокера из доты, плодились и мочили спавн крипов на протяжении 10 минут, по счетчику хендлов сначала хендлы росли, а потом спадали до нормы, и так циклически.
Юзал наработку для отсроченного удаления триггеров из доты, чтобы не было никаких проблем со стабильностью.
Cancel, но события еще вешаются на триггер, помимо юнита, поэтому его тоже удаляешь время от времени.
Что сделать то хочешь? Скажи что задумал?
0
13
6 лет назад
0
Что сделать то хочешь? Скажи что задумал?
Скороу сделаю анонс карты, увидишь -) проще показать чем рассказывать.
Вообще я сделал по другому - отказался от работы с многочисленными группами юнитов. Посмотрел как работают функции на работу с ними - мне показалось они слишком затратные. Например - чтобы проверить пуста ли группа - цикл зачем-то проходит по каждому юниту из занесёных в группу, а не прерывается на первом встреченном юните.
Так что вместо массивных групп - я делаю массивные счётчики, и работаю с ними обращаясь в массиве через index = GetUnitUserData . При смерти юнитов убавляется счётчик udg_uGroup_enum[index], и когда он возникает нуля - запускаю триггер udg_uGroup_trigUnDead[index] - таким образом на карте постоянно спавнятся группы юнитов и я могу отлавливать события на уничтожения этих групп по факту используя только одно событие.
когда в группе юниты спавнятся - я раздаю им index, идентичный шаблону по которому они спавнятся и наращиваю udg_uGroup_enum[index] чтобы отслеживать количества в группах
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.