У меня есть много универсальных переменных, например A_unit или An_integer, которые я использую во всех триггерах, которые выполняются моментально, без функции wait или таймеров.
Но я стал замечать странные баги у себя на карте. Просто часть функций перестала выполняться. Например в начале игры у меня скрываются рабочие всех игроков. Делается это через map initialisation, находятся рабочие одного игрока, скрываются, триггер перезапускается и делает то же самое для следующего игрока. При этом все рабочие записываться в массивный отряд.
Но когда приходит время показывать рабочих конкретного игрока, ничего не происходит. И я думаю, что может использование универсальных переменных все портит, потому что они ещё где-то используются. Либо это баг проверки класса юнита hall-type или peon-type, либо ещё что-то.
Короче, я просто не могу найти причину багов.

WilliamBz, UnitGroup надо изначально инициализировать если массив больше 1. Указать рядом с галочкой массива количество инициализированых переменных, например, 100
`
ОЖИДАНИЕ РЕКЛАМЫ...
10
Нашёл причину бага. По какой-то причине, Picked Unit не добавляется в Unit Group.
Ответы (11)
28
WilliamBz, UnitGroup надо изначально инициализировать если массив больше 1. Указать рядом с галочкой массива количество инициализированых переменных, например, 100
Принятый ответ
28
WilliamBz, и вернее будет называть не универсальные переменные, а тестовые
10
rsfghd, если я делаю Unit Group массив например 24, это значит что при инициализации карты у меня автомтически будет создано 24 переменные?
10
rsfghd, можно ли это как-то оптимизировать? Если указать массив = 1, но в триггерах указать группу через Set Variable например индекс 24, у меня создастся 24 группы или останется только 1-ая и 24-ая?
Ещё вопрос, на случай если ответ - групп будет две:
А если я буду через условия перебирать индекс от 1 до 24, у меня не будут в результате проверки создаваться группы?
28
Если указать массив = 1, но в триггерах указать группу через Set Variable например индекс 24, у меня создастся 24 группы или останется только 1-ая и 24-ая?
только 1 и 24, чтобы заполнить ячейки между ними - нужно циклом создавать группы

А если я буду через условия перебирать индекс от 1 до 24, у меня не будут в результате проверки создаваться группы?
нет, не будут, группа создаётся функцией CreateGroup, которая присутствует во всех гуишных функциях выбора юнитов в группу
10
rsfghd, спасибо огромное за ответы!
Выходит, что у нас массив по-умолчанию = 1, и если я переназначу переменную с индексом = 1 через Create Group, то будет утечка группы, которая была создана при инициализации карты?
28
WilliamBz, да, если ты в группы под индексами 0 и 1 сделаешь выбор юнитов, будет утечка, потому что группы уже существовали до этого и их нужно было удалить. Но выбор юнитов в группу на гуи будет в любом случае утечен из-за необнуления локалки в одной из функций в коде
10
Но выбор юнитов в группу на гуи будет в любом случае утечен из-за необнуления локалки в одной из функций в коде
rsfghd, а если я эту группу использую одноразово, и затем удаляю через Destroy (в кастомном редакторе варика эта функция есть)?
Если всё равно утечка, то получается, мне через гуи остаётся только создать перманентную группу, которую просто периодически очищать, и добавлять туда юнитов по одному (например при реакции на какое-то событие)?
Вообще это проблема. У меня в карте несколько периодичных триггеров для ауры, которые постоянно создают-удаляют группу. Если будут играть 24 игрока героями, юзающими эти триггеры, то фризы обеспечены. Похоже, придётся через джасс это делать.
28
WilliamBz, кастомскрипт юзай, чтобы не было утечек
CreateGroup
GroupEnumUnitsInRange/Rect
DestroyGroup
Чтобы оставить комментарий, пожалуйста, войдите на сайт.