Создал систему отрядов, обратился на этот ресурс за помощью на этот ресуср в результате чего была выявлена новая более страшная опасность для карты, это большое количество утечек со старта игры на карте через UjAPI: Handle Counter, при загрузке карты были обнаружены 10 000 утечек, не могу выявить и даже не знаю как причины этих утечек и устранить их, может кто то может помочь. Помогите установить причину хэндл утечек со старта игры и устранить их.
Извиняюсь за первую версию карты, она была не правильной.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
18
1 год назад
0
Отключай поочерёдно триггеры/функции, и смотри, когда хэндлы перестанут генерироваться. С учётом того, что деревья и юниты на карте тоже считаются счётчиком. Мне помогало)
0
29
1 год назад
Отредактирован nazarpunk
0
Я ж уже не раз писал, важно не само количество хэндлов, а динамика их роста. Если значение колеблется вокруг некоего числа, то можно забить болт. Если же улетает в космос, то нужно бить тревогу.
И неплохо бы ссылку на UjAPI: Handle Counter привести, чтоб люди не искали.
0
6
1 год назад
Отредактирован blackmaker
0
В общем ситуация следующая, после того как удалил в триггере отвечающий за перемещение отряда несколько переменных оставшиеся от изначальной версии системы и не несущие никакого смысла более того не стирающиеся в триггере после выполнения своих функций, рост хэндлов после отдачи приказов отрядам пропал, что гигантски хорошо.
Помимо вышеописанного, я ради интереса не стал удалять по одному триггеру, а удалил абсолютно все (чистый лист рт), проверил, точно такое же кол-во стартовых хэндлов какое и было до удаления абсолютно всех триггеров.
Чем больше карта - тем больше кол-во стартовых хэндлов, но как то не в соизмеримых пропорциях. На карте 64x64 с маленьким кол вом декораций хэндлов аж почти под 7000, в то время как на карте 127x127 с явно большим кол-вом декораций их всего за 10 000.
Теперь остается выяснить что же из триггеров заставляет расти хэндлы на +1 после подготовки каждого юнита.

После полного уничтожения отряда кол-во хэндлов становится меньше стартового.

Извиняюсь, после удаления абсолютно всех триггеров кол-во стартовых хэндлов упало с 6987 до 6449, это скорее всего из за раставленых отрядов в которых юниты записаны в определенные переменные. После уничтожения отряда переменные отрядов очищаются в связи с чем общее кол-во хендлов и падает ниже стартового показателя.
0
29
1 год назад
0
Чем больше карта - тем больше кол-во стартовых хэндлов, но как то не в соизмеримых пропорциях. На карте 64x64 с маленьким кол вом декораций хэндлов аж почти под 7000, в то время как на карте 127x127 с явно большим кол-вом декораций их всего за 10 000.
Ну так 3000 декораций это не мало.
После полного уничтожения отряда кол-во хэндлов становится меньше стартового.
Потому что после разложения юнитов их хэндлы освобождаются и переиспользуются.
Теперь остается выяснить что же из триггеров заставляет расти хэндлы на +1 после подготовки каждого юнита.
0
6
1 год назад
0
Утечки.
Как удалить утечку созданного юнита?
0
29
1 год назад
Отредактирован nazarpunk
0
Как удалить утечку созданного юнита?
function DoSomething takes nothing returns nothing
		local unit u = CreateUnit( Player( 0 ), 'hpea', 0., 0., 270. )
		....
		set u = null
endfunction
0
6
1 год назад
0
Еще крайне неприятный факт, когда создается отряд 12 юнитов, то хэндлы повышаются с 6812 до 6835, но при полном уничтожении отряда хэндлы падают даже не до 6812, а до 6823, на 11 больше остается чем было, что страшно.

Jass MythBusters
Спасибо. Но есть ли способ на гуи?

function DoSomething takes nothing returns nothing
local unit u = CreateUnit( Player( 0 ), 'hpea', 0., 0., 270. )
....
set u = null
endfunction
это способ вернуть цвет юниту после применения перевоплощения? только в коде определенные параметры цвета, а нужны параметры умирающего юнита.
0
18
1 год назад
0
это способ вернуть цвет юниту после применения перевоплощения? только в коде определенные параметры цвета, а нужны параметры умирающего юнита.
Это игрок 0, ид юнита, координаты х, у, угол поворота.
Утечка убирается через set u = null.
0
29
1 год назад
0
Еще крайне неприятный факт, когда создается отряд 12 юнитов, то хэндлы повышаются с 6812 до 6835, но при полном уничтожении отряда хэндлы падают даже не до 6812, а до 6823, на 11 больше остается чем было, что страшно.
Хэндл юнита очищается после окончания разложения. Ты подождал?

Спасибо. Но есть ли способ на гуи?
Возможно есть, только я его не знаю.
0
29
1 год назад
Отредактирован nazarpunk
0
Насколько я помню, в JNGP ещё не пробросили создание юнита нативкой. Посему придётся создавать юнита в Location, которая скорей всего утечёт.
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction
И или присваивать результат группе, которая скорей всего утечёт или создавать по одному и забирать через bj_lastCreatedUnit. Можно конечно воспользоваться CustomCode, но тогда весь гуй превратится в текстовый файл с неудобным редактированием. Оно тебе надо?
0
27
1 год назад
Отредактирован rsfghd
0
вар крашается если что примерно на 1.2кк утечек (а точнее реальной нагрузки на вар, 1.2к мб), так что 10к это мелочь и вероятно это тупо деструкты, юниты, предметы и глобальные переменные которыми всегда пользуешься, тут не над чем париться, главное, как указали выше, следить за динамикой роста
0
6
1 год назад
0
Посему придётся создавать юнита в Location, которая скорей всего утечёт.
Подозреваю что, как писал выше, после иничтожения отряда падает кол во хэндлов но все равно остается на 11 больше прежнего значения до создания этого отряда из 12 юнитов, это 11 остающихся хэндлов и есть юниты не командиры 12 юнитового отряда где 12й это командир, которые добавляются созданному юниту командиру триггерно, но они добавляются на точку рядом с командиром которая выше у меня установленна в переменную и удаляется сразу после действия создания юнита в этой точке, так почему же ее хэндл не удаляется?

12 хэндл, по всей видимости от командира который создается в строении естественным путем, как появляется, так и исчезает после разложения его скелета после смерти, скелеты в моей системе лежат 5 сек, это для значительного снижения нагрузки на движ вара.

вар крашается если что примерно на 1.2кк утечек (а точнее реальной нагрузки на вар, 1.2к мб)
крашится, ты имеешь в виду только начинает лагать, или вылетает?
0
29
1 год назад
0
но они добавляются на точку рядом с командиром которая выше у меня установленна в переменную и удаляется сразу после действия создания юнита в этой точке
Гуй. Без конвертации в код и оптимизации дать точный ответ невозможно.
0
27
1 год назад
0
крашится, ты имеешь в виду только начинает лагать, или вылетает?
краш значит краш, если я говорю лаги/просадка фпс и т.п., значит лаги, просадка фпс и т.п.
ничего другого я не имею ввиду)
краш это когда ты видишь окно с фатал еррором
Загруженные файлы
0
6
1 год назад
0
краш значит краш, если я говорю лаги/просадка фпс и т.п., значит лаги, просадка фпс и т.п.
ничего другого я не имею ввиду)
краш это когда ты видишь окно с фатал еррором
В любом случае лаги это уже серьезная угроза, не менее чем краш.
0
6
1 год назад
Отредактирован blackmaker
0
в общем при создании командира, ему добавляется еще 11 юнитов солдат, проверял, изменял триггер ''для каждого числа А выполнять от 1 до 11" на "для каждого числа А выполнять от 1 до 1" и выявил что один добавленный юнит дает прибавку +3 хэндла, а после уничтожения отряда забирает -2. В первом варианте где "1 до 11" добавленные 11 юнитов дают прибавку + 23 хэндла, а после уничтожения отряда -12 , в связи с чем 11 лишних хэндлов остается. Я не знаю в чем причина.
1
29
1 год назад
1
для каждого числа А выполнять от 1 до 11
Ещё раз повторю. Если ты хочешь настолько глубоко погрузиться в хэндлы, то переходи на код. На гуях это бессмыленно.
0
6
1 год назад
0
еще я убедился, что функция call RemoveLocation (upg_название переменной) которая удаляет точку в которой создается солдат, выполняет свою функцию т к при ее удалении хэндлов при старте и создании отряда гораздо больше.
0
18
1 год назад
0
blackmaker, Правильно говорит nazarpunk, переходи на код. Там вообще никакие точки не понадобятся. И он не страшный. Учится максимум 2 месяца, по статьям из хгм. Просто немного придётся с переводчиком гугл посидеть. Зато взамен получишь кучу ништяков для работы... И не надо будет ломать голову над лишними механиками.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.