Здравствуйте, мне очень нравится моя карта, но в ней есть 2 серьезных проблемы. Она вылетает и тормозит спустя 90 минут игры. Как можно вообще отловить утечки в Reforged? Программами, которые на сайте я пытался - они не запускаются.
Есть скрипт поведения АИ, который периодический, и если повысить период - то вылетов нет. Но больше меня интересует, как вообще отловить утечки?
скину скрипт поведения аи:

Короче Дипсик все решил, буду теперь писать напрямую ему. Вот реально, тупо не юзал ии-шники, потому что думал они не настолько сейчас продвинуты. Еще он сказал скинуть ему весь код карты, он одним скриптом все перепишет без утечек за секунду.
Вот его решение.
set a = GetUnitLoc(GetTriggerUnit())
set g = GetUnitsInRangeOfLocAll(400.00, a, Condition(function prorokvelenc))
call ForGroupBJ(g, function prorokvelenc)
call DestroyGroup(g)
call RemoveLocation(a)
set a = null
set g = null
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
23
Похожие вопросы:

ответ
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
ответ
nvc123, увы там дефолт ИИ, недаст особо управлять мобами.
Щяс скину пример из доты но более понятный, как заставить нейтралов ходить и атаковать.
Вот вам пример контроля нейтралами.

17
Почитал про утечки, принцип понял. Скажите, пожалуйста, знающие люди.
Вот этот вызов оставит утечки?
set a = GetUnitLoc(GetTriggerUnit())
call ForGroupBJ( GetUnitsInRangeOfLocMatching(400.00, a, Condition(function prorokvelenC)), function prorokvelenA )
call DestroyGroup ( GetLastCreatedGroup() )
call RemoveLocation ( a)
set a = null

или группу обязательно до этого в переменную пихать?
Ответы (6)
9
TeX13, попробуй сначала научиться писать нормально, а не просто конвертить ГУИ в джасс.
А ну и еще скидывать код в ворде... Я не встречал еще таких гениев
17
IzobretatelBoom, я фрагмент отдельный написал, ты по нему определить что-ли не можешь?
9
TeX13, Могу и определил. Утечки есть, т.к. это бж функции
30
TeX13, может перед тем как умничать ты бы в функции посмотрел?
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
Этот комментарий удален
17
Короче Дипсик все решил, буду теперь писать напрямую ему. Вот реально, тупо не юзал ии-шники, потому что думал они не настолько сейчас продвинуты. Еще он сказал скинуть ему весь код карты, он одним скриптом все перепишет без утечек за секунду.
Вот его решение.
set a = GetUnitLoc(GetTriggerUnit())
set g = GetUnitsInRangeOfLocAll(400.00, a, Condition(function prorokvelenc))
call ForGroupBJ(g, function prorokvelenc)
call DestroyGroup(g)
call RemoveLocation(a)
set a = null
set g = null
Принятый ответ
Ответы (5)
17
IzobretatelBoom:
ну я же тебя спросил, где утечка, а ты вообще ничего не понимаешь... биджей, сиджей какие-то
а по итогу оказывается, что call DestroyGroup ( GetLastCreatedGroup() ) - я здесь еще 3 утечки наплодил
и он мне это все расписал, и я все понял, а ты и дальше будешь думать, что утечки в bj))))
25
TeX13, я не спец по утечкам, но ты создаёшь новый кондишон на каждое выполнение этого кода.
30
без утечек
Без утечек. Верим.
function GetUnitsInRangeOfLocAll takes real radius, location whichLocation returns group
    return GetUnitsInRangeOfLocMatching(radius, whichLocation, null)
endfunction
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
25
function GetUnitsInRangeOfLocAll takes real radius, location whichLocation returns group
Кек, а автор дипсик туда три аргумента отправляет))0.
23
TeX13, Как оказалось, они ещё не продвинуты. Он ведь даже от bj функций - дублеров не избавился, например ForGroupBJ
17
в общем дикпик справляется нереально, мы с ним заменили уже множество скриптов, 0 ошибок от него. Все скрипты компалятся. Он даже, не спрашивая заменяет BJ на нативки.

Про утечки и нативки я понял абсолютно все. Я бы с удовольствием писал бы все сам и буду писать. Но исправлять 1000 скриптов вручную - это жесть.
Ответы (8)
4
TeX13, так.... Откуда он знает этот язык варкрафта то ?
4
human1, ого, интересно... То есть если карта вылетает иногда или дисинх, то он чисто теоритически может это исправить или указать где ошибка? А если не на ДЖАСС, а на ГУИ?
23
ShadowNinja, нет, ведь для этого ему придётся непонятно как и непонятно где запустить варкрафт, карту и поиграть)
А тут из вводных данных только скрипты
4
EugeAl, а если просто в ИИ все способности и ДЖАСС и Гуи запихнуть, что бы он проверил? Или он так не сможет?
Вдруг где найдёт ошибку или утечку
23
ShadowNinja, код карты можно ему скормить.
Гуи не выйдет, потому что редактор карт сохраняет гуи в джасс всегда.
Но в коде он ошибки найдёт)
4
EugeAl, эх жаль... А "код карты", там он всё проверит? Или как? Или только 50% карты
Просто я не совсем понимаю что такое код карты
23
ShadowNinja, код карты - это файл war3map.j внутри карты. Извлечь его можно через mpq editor. Открыть можно блокнотом. Вот его и надо скармливать.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.