Добавлен Slavies
Я занимаюсь созданием разных карт достаточно долго. При создание карт я никогда не сталкивался с проблемой утечек в триггерах. Так вот, когда я начал делать достаточно масштабную карту в плане её функций и остального, я столкнулся с проблемой утечек, в следствие чего, карта начинала лагать при убийстве любых мобов. Я не понял по какой причине они происходит. Я прошу помочь мне разобраться с причиной возникновения утечек. Заранее спасибо.
Принятый ответ
утечки происходят, в основном, из-за:
- не удаленных объектов, таких как точки, юниты, группы
- не обнуленных локальных переменных объектов
такое встречается даже внутри стандартных гуи-функций, так что лучше юзать джасс
проблемы возникают, когда таких объектов накапливается много, самый распространенный пример, каждый раз когда в триггере вызывается "Position of Unt (...)" создается точка и остается в памяти как объект. Такое происходит каждый раз когда мы получаем какую-либо точку, будь то местонахождение юнита, центр области, сдвиг другой точки в каком-то направлении, и т.д.
Эту точку надо заносить в переменную, а после всех действий с ней удалять - на гуи триггерах такого действия нет, нужно писать в Custom Script - "call RemoveLocation(udg_имя_точки)"
Также кроме точек, распространенной проблемой являются группы/отряды юнитов. Например, если каждые 0,05 секунд получать список всех живых юнитов игрока и перебирать их. Перед такой функцией перебора надо писать Custom Script - "set bj_wantDestroyGroup = true", тогда после перебора группа удалится.
Edit: скачал карту.
Убери все эти бессмысленные вейты по 0.01 сек. между действиями триггеров.
Ожидание всегда действуют не менее 0.1 сек, даже если указать 0 сек.
У тебя этот "DieUnitsCapGold" может сто раз выдать золото не тем игрокам, если за время этих вейтов поменяется глобалка "Aubiv". Например если разные игроки за секунду убьют несколько мобов.
Edit 2: триггер Win в папке ПиП
создает группу каждый раз когда умирает какой-либо юнит на карте, что может привести к утечкам
смысл триггера не ясен. возможно нужно заменить условие на Unit Type of Triggering Unit == Старейшина йети
Edit 3:
триггер Kill в папке Таблицы тоже создает кучу утекающих групп в условиях Dying unit== Random unit...
Random unit in ... возвращает случайного юнита из группы - внутри этой функции лежит перебор с рандомным шансом. Замени это на проверку Unit type of ...unit.
Ожидание всегда действуют не менее 0.1 сек, даже если указать 0 сек.
У тебя этот "DieUnitsCapGold" может сто раз выдать золото не тем игрокам, если за время этих вейтов поменяется глобалка "Aubiv". Например если разные игроки за секунду убьют несколько мобов.
Edit 2: триггер Win в папке ПиП
создает группу каждый раз когда умирает какой-либо юнит на карте, что может привести к утечкам
смысл триггера не ясен. возможно нужно заменить условие на Unit Type of Triggering Unit == Старейшина йети
Edit 3:
триггер Kill в папке Таблицы тоже создает кучу утекающих групп в условиях Dying unit== Random unit...
Random unit in ... возвращает случайного юнита из группы - внутри этой функции лежит перебор с рандомным шансом. Замени это на проверку Unit type of ...unit.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован biridius
Ожидание всегда действуют не менее 0.1 сек, даже если указать 0 сек.
У тебя этот "DieUnitsCapGold" может сто раз выдать золото не тем игрокам, если за время этих вейтов поменяется глобалка "Aubiv". Например если разные игроки за секунду убьют несколько мобов.
Edit 2: триггер Win в папке ПиП
создает группу каждый раз когда умирает какой-либо юнит на карте, что может привести к утечкам
смысл триггера не ясен. возможно нужно заменить условие на Unit Type of Triggering Unit == Старейшина йети
Edit 3:
триггер Kill в папке Таблицы тоже создает кучу утекающих групп в условиях Dying unit== Random unit...
Random unit in ... возвращает случайного юнита из группы - внутри этой функции лежит перебор с рандомным шансом. Замени это на проверку Unit type of ...unit.
я думаю автор уже решил проблему