Короткая предыстория. Пытаясь понять (хотя бы на %) принципы оптимизации, зашел на вот это вот статью:
Там в конце приведен "Список утекающих BJ функций", в числе которых нашел "MultiboardSetItemValueBJ"
Далее, я взял свои триггеры с таблицей (мультбоардром) и конвертнул их в код. И там же собственно нашел вот такой же текст.
Значит ли это, что применение действия (в гуи) установить текст таблицы вызывает утечку? Если да, то как этого избежать, не изменив результат? Заранее спасибо.

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

  1. Вроде закончил триггер. Полчаса раздумий пришлось на то, чтобы приспособить все на месте(понять, что счет идет от 0, а колонки и столбики поменялись местами в отличии от гуи). Прикладываю то, что получилось, чуть позже выберу как решение. Но без rsfghd ничего не получилось бы, огромное спасибо.
  1. Посмотрел про дефайн. Кое-как понял что дефайн это макрос сиджасса, и мне на рефе такое невозможно и по хорошему надо на луа.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
27
3 года назад
Отредактирован rsfghd
1
да, это утекает, а чтобы избавиться от всех утечек проще перейти на джасс уже, чем под каждую бж функцию подстраиваться

function MultiboardSetItemValueBJ takes multiboard mb, integer col, integer row, string val returns nothing
    local integer curRow = 0
    local integer curCol = 0
    local integer numRows = MultiboardGetRowCount(mb)
    local integer numCols = MultiboardGetColumnCount(mb)
    local multiboarditem mbitem = null

    // Loop over rows, using 1-based index
    loop
        set curRow = curRow + 1
        exitwhen curRow > numRows

        // Apply setting to the requested row, or all rows (if row is 0)
        if (row == 0 or row == curRow) then
            // Loop over columns, using 1-based index
            set curCol = 0
            loop
                set curCol = curCol + 1
                exitwhen curCol > numCols

                // Apply setting to the requested column, or all columns (if col is 0)
                if (col == 0 or col == curCol) then
                    set mbitem = MultiboardGetItem(mb, curRow - 1, curCol - 1)
                    call MultiboardSetItemValue(mbitem, val)
                    call MultiboardReleaseItem(mbitem)
                endif
            endloop
        endif
    endloop
endfunction
всё что утекает из этой функции это всего-лишь необнулённая переменная mbitem
и чтобы избавиться от утечки достаточно прописать в конце set mbitem = null


вот тут тоже есть про мультиборд
Оптимизация


статья бтв 2006 года, но инфы несёт не меньше на ряду с комментами
Загруженные файлы
0
14
3 года назад
0
Спасибо, решение щас попробую, а статейки читану.
1
27
3 года назад
1
local multiboarditem mbitem = MultiboardGetItem( udg_Table, 1, GetPlayerId( GetOwningPlayer( GetTriggerUnit( ) ) ) + 2 )
call MultiboardSetItemValue( mbitem, udg_Text )
call MultiboardReleaseItem( mbitem )
set mbitem = null
можешь создать такой кастомскрипт, только тебе нужна переменная Text, куда занесёшь собственно нужный текст
0
14
3 года назад
0
Щас юзану. А тем времен такой вопрос - а могу ли я заменить на карте как-то бж функцию (в данном случае добавить обнуление той переменной). Чтобы в итоге вот эта гуишка была без утечки, каждый раз, когда её использую.
1
27
3 года назад
1
VinerX, дефайном, я же кидал ссылки, комменты идут под игнор?
2
14
3 года назад
2
  1. Вроде закончил триггер. Полчаса раздумий пришлось на то, чтобы приспособить все на месте(понять, что счет идет от 0, а колонки и столбики поменялись местами в отличии от гуи). Прикладываю то, что получилось, чуть позже выберу как решение. Но без rsfghd ничего не получилось бы, огромное спасибо.
  1. Посмотрел про дефайн. Кое-как понял что дефайн это макрос сиджасса, и мне на рефе такое невозможно и по хорошему надо на луа.
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.