Я занимаюсь созданием разных карт достаточно долго. При создание карт я никогда не сталкивался с проблемой утечек в триггерах. Так вот, когда я начал делать достаточно масштабную карту в плане её функций и остального, я столкнулся с проблемой утечек, в следствие чего, карта начинала лагать при убийстве любых мобов. Я не понял по какой причине они происходит. Я прошу помочь мне разобраться с причиной возникновения утечек. Заранее спасибо.

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

утечки происходят, в основном, из-за:
  1. не удаленных объектов, таких как точки, юниты, группы
  2. не обнуленных локальных переменных объектов
такое встречается даже внутри стандартных гуи-функций, так что лучше юзать джасс
проблемы возникают, когда таких объектов накапливается много, самый распространенный пример, каждый раз когда в триггере вызывается "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
19
6 лет назад
0
Похожие вопросы:

ответ
~16GB:
юзай Wc3SLKOpt.exe
ответ
При конвертации моделей из игр в MDX их вес велик как и вес их текстур ! Я оптимизирую и сжимаю модель через MDLvis а текстуры через BLP Laboratory но их вес все еще внушителен ( Есть ли другие варианты среза веса без дефектов материала ?
Нет. Только удаление лишних анимаций. Остальную оптимизацию веса сделает mdlvis.
При импорте некоторых моделей в карту возникает проблема с их выбором при манипуляции ( Передвижения ) словно их Выбор отсутствует , Думаю некоторые с подобным сталкивались ...
Если модель нельзя выделить в игре курсором, у неё отсутствуют collision shapes (формы коллизии). Их можно добавить в War3ModelEditor -> Окна -> Редактор узлов -> правый клик -> Создать форму - > отредактировать размеры и положение. Их можно добавить несколько, чтобы покрыть модель целиком. Они отвечают за взаимодействие модели с курсором.

Один ресурс - один вопрос, после пойдут замечания.
ответ
В конце ноября 2016 года Blizzard выпустили патч, позволяющий играть по сети в карты до 128 Мб.
ответ
ничем, кроме названий переменных. попробуй отключить морфинг имен
ответ
ClotPh:
Кстати да, тоже интересно. Всегда просто удаляю второй. Я понимаю, что там скорее всего что-то несет информационную ценность, но оно бы тогда хотя бы настраивалось как-то в оптимизаторе, создавать его или не создавать и/или удалить после выполнения оптимизации, а то немного раздражает мусор руками чистить. Если такие настройки есть - подскажите плз.
Это скрип карты, для анализа на ошибки.

1
21
6 лет назад
Отредактирован biridius
1
утечки происходят, в основном, из-за:
  1. не удаленных объектов, таких как точки, юниты, группы
  2. не обнуленных локальных переменных объектов
такое встречается даже внутри стандартных гуи-функций, так что лучше юзать джасс
проблемы возникают, когда таких объектов накапливается много, самый распространенный пример, каждый раз когда в триггере вызывается "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.
Принятый ответ
2
29
6 лет назад
2
Вот хорошая статья
2
32
6 лет назад
2
Ууу, с такой картой только переписывать весь код...
0
7
6 лет назад
0
Я определил ошибку! Не много времени понадобилось чтобы найти её, ибо использовал свой метод поиска. Ошибка находится в категории Таблицы - триггер kill. Там используется в условии "Daying unit равно Random unit from Units of Type ...", причём этих условий слишком много, что, видимо и вызывает притормаживание. Думай как-то по другому как это сделать.
0
21
6 лет назад
0
Dagger667, я уже написал об этом, п.3 под катом 3 недели назад
я думаю автор уже решил проблему
Чтобы оставить комментарий, пожалуйста, войдите на сайт.