Add event DamageTaken создаёт утечку, как исправить?
Помните мой вопрос про детектор урона? Так вот, оказалось что утечка шла не из плавающего текста, а из действия указанного в заголовке. Как устранить эту утечку и насколько она страшна? Скрин функции прилагается.

Лучший ответ:
Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
дык заноси их в группу, если юнит уже в группе то не добавляешь событие



Просмотров: 358

quq_CCCP #1 - 5 месяцев назад 0
А зачем тебе плодить ивенты? Это события - юнит получает урон, события никак не удаляются, можно удалить лишь триггер, да и то не в гуи.
Вовсе не надо в гуи делать все что связано с детектом урона, это сложно для уровня гуи и стоит явно переходить на jass.
Alexey103 #2 - 5 месяцев назад 0
quq_CCCP, Ну так тогде помогите мне сделать простую систему отображения урона. Мне всего-то нужно.
Событие (Юнит атакован/получил повреждение)
условие (он находится в области "тренировка")
Действие (Отобразить над головой атакованного юнита полученный урон в виде плавающего текста)
Можно и джасс, только не предлагайте готовые системы на 5000 строчек кода vJass, cJass, которые требуют жнгп, а потом установку особой библиотеки, а потом оказывается что в них не настраиваемые параметры, и ты выкидываешь это гуано из своей карты проклиная того кто тебе это посоветовал. Нужно простое и полезное решение, кто может его дать?
AlexSan #3 - 5 месяцев назад 0
Alexey103:
quq_CCCP, Ну так тогде помогите мне сделать простую систему отображения урона. Мне всего-то нужно.
Событие (Юнит атакован/получил повреждение)
условие (он находится в области "тренировка")
Действие (Отобразить над головой атакованного юнита полученный урон в виде плавающего текста)
Можно и джасс, только не предлагайте готовые системы на 5000 строчек кода vJass, cJass, которые требуют жнгп, а потом установку особой библиотеки, а потом оказывается что в них не настраиваемые параметры, и ты выкидываешь это гуано из своей карты проклиная того кто тебе это посоветовал. Нужно простое и полезное решение, кто может его дать?
Если тебе нужно простенькое отображение урона в одной области на карте, то можно попробовать сделать в лоб.
По таймеру сохранять значения хп юнитов в области в массив/хэш, считать разницу с предыдущим значением, и если разница больше определенного значения, то делать всплывающией текст.
Этот вариант очень глупый, но как по мне для одной области на карте норм. Но Jass все равно надо будет использовать.
Alexey103 #4 - 5 месяцев назад 0
AlexSan, Таймеры и в гуи есть, ну и мне как бы нужно чтоб система была устойчива к высокой скорости атаки, а тут получается дпс метр. + Я использую манекенных юнитов с бешенной регенерацией здоровья, так что придётся менять и их механику тоже.
AlexSan #5 - 5 месяцев назад (отредактировано ) 0
Alexey103:
AlexSan, Таймеры и в гуи есть, ну и мне как бы нужно чтоб система была устойчива к высокой скорости атаки, а тут получается дпс метр. + Я использую манекенных юнитов с бешенной регенерацией здоровья, так что придётся менять и их механику тоже.
Вместо регенерации, можешь просто сделать им много хп, и каждое срабатывание таймера устанавливать хп на 100%. Высокая скорость атаки будет нормально работать если у тебя будет таймер с малым периодном. И вот тут уже нужен JASS что бы оптимизировать все это дело и устранить утечки.
+ таймеры в гуи недостаточно гибкие как по мне.
Alexey103 #6 - 5 месяцев назад 0
AlexSan, Я так понял чтоб применить всю эту фигню нужно будет ещё и добавлять в группу всех юнитов в области? Ну и таймер то один, на одногоюнита, я и так могу задетектить урон, там даже событие есть юнит получает урон.
AlexSan #7 - 5 месяцев назад 0
Alexey103:
AlexSan, Я так понял чтоб применить всю эту фигню нужно будет ещё и добавлять в группу всех юнитов в области? Ну и таймер то один, на одногоюнита, я и так могу задетектить урон, там даже событие есть юнит получает урон.
Если у тебя детектить урон нужно только по манекенам, то можно упростить немного, но по сути да.
Событие я не предлагаю использовать так как ты говоришь что оно вызывает у тебя утечку, а в таймерах с малым периодом это плохо.
PT153 #8 - 5 месяцев назад (отредактировано ) 2
Мда.
Триггер Init.
События - Юнит входит в Вся карта.
Условия - Тип юнита равно Манекен.
Действия - Добавить событие в триггер Maneken Боевая единица Вошедший юнит получает урон.
Триггер Maneken.
События - ИХ НЕТ.
Условия - Атакованный юнит находится в области (какая нужна).
Действия - Создать плавающий текст над Атакованный юнит (и прочее).
То, что делаете Вы, будет работать ужасно, так как событие будет добавляться каждый раз, когда юнит атакован, и триггер по созданию текста будет срабатывать столько раз, сколько событий.
Всё это можно сделать на ГУИ.
Alexey103 #9 - 5 месяцев назад -2
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
nvc123 #10 - 5 месяцев назад -2
Alexey103, а открыть статьи и почитать сложно?
там есть пример отлова урона на гуи
Alexey103 #11 - 5 месяцев назад 0
nvc123, Не нашел я статей на эту тему, может ты мне ссылку кинешь?
ScopteRectuS #12 - 5 месяцев назад 0
Hate #13 - 5 месяцев назад 2

Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
дык заноси их в группу, если юнит уже в группе то не добавляешь событие
PT153 #14 - 5 месяцев назад (отредактировано ) 0
Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
С чего Вы взяли, что создаётся утечка от добавления события? Об этом много статей, и, насколько мне известно, как только юнит умирает, все события, связанные с ним, удаляются.
Тем более Вам нужно это для всего 1 юнита! О какой утечке вообще речь?
Я указал на ошибку, из-за которой добавляется много одинаковых событий (а следом баги и лаги):
То, что делаете Вы, будет работать ужасно, так как событие будет добавляться каждый раз, когда юнит атакован, и триггер по созданию текста будет срабатывать столько раз, сколько событий.
Hate:
дык заноси их в группу, если юнит уже в группе то не добавляешь событие
Зачем, когда можно сделать так, как я? Юнит только 1 раз входит в область Вся карта. Также можно проверять с помощью CustomData.
Alexey103 #15 - 5 месяцев назад 0
Hate, Невероятно, всё работает. Только не входящий в карту юнит а входящий в особую область. Просто гениально, и ещё раз просто.
PT153 #16 - 5 месяцев назад 0
Alexey103:
Hate, Невероятно, всё работает. Только не входящий в карту юнит а входящий в особую область. Просто гениально, и ещё раз просто.
А чем моё решение не устраивает? И в группу добавлять не надо.
Alexey103 #17 - 5 месяцев назад 0
PT153, Мне нужно это не для одного юнита. А для юнитов в области. И я проверил утечки были от того что добавлялись события.
PT153 #18 - 5 месяцев назад (отредактировано ) 0
Alexey103:
Мне нужно это не для одного юнита. А для юнитов в области. И я проверил утечки были от того что добавлялись события.
Юнит входит в область Вся карта только 1 раз за игру, то есть событие Юнит получает урон добавляется только 1 раз. А в триггере, куда добавляется событие, есть условие (какое Вам нужно), при котором триггер будет срабатывать, как я и написал.
Триггер Init.
События - Юнит входит в Вся карта.
Условия - Тип юнита равно Манекен.
Действия - Добавить событие в триггер Maneken Боевая единица Вошедший юнит получает урон.
Триггер Maneken.
События - ИХ НЕТ.
Условия - Атакованный юнит находится в области (какая нужна).
Действия - Создать плавающий текст над Атакованный юнит (и прочее).
Всегда так делал, всё работало, и никаких утечек нет.