Просто забираем способность склад, выдаём абилку от транспорта.
1 триггер на вход раба, выход раба и каст абилки на выход всех - чекаем кол-во рабов внутри, если их 1 или больше, даём способность на + скорость атаки и ставим нужный уровень; если 0, то забираем способность.
Поддержка Reforged: SD и HD
Карта создана в редакторе YDWE
Кто-нибудь проверял совместимость с рефом? Если использовались фичи YDWE, то она не будет там работать, поэтому поле с поддержкой нужно отредактировать.
globals
location Loc
endglobals
function DoSomething takes nothing returns nothing
local location loc
set Loc = Location(0., 0.)
set loc = Loc
endfunction
В данном примере важно понять, утекает ли локальная переменная loc без обнуления или нет. Тут не нужно удалять локацию, она занесена в глобалку и будет использоваться в другом коде.
Смотри видео внимательно, оно потом падает, ибо проходят и другие действия. Оно не растёт без конца. Оно ещё и падает
Предоставленный код тобою - утекает лишь в случае если его повторять и не удалять используемый объект.
Я предоставил ссылку на мою статью, где показывается, что если удалять точку и не обнулять переменную, потребление ОЗУ растёт. В твоей статье это якобы опровергается, но в тестах с локацией, что ты привёл, локалка обнуляется (ну и разумеется потребление ОЗУ остаётся неизменным). Это не опровержение, а подтверждение.
вопрос к тебе, как думаешь, утекает ли это
Судя по твоему тесту с юнитов - утечек не будет.
Я так понял, проблема с локалками возникает в том случае, если в функции создаётся хендл.
То есть, если создаётся хендл, то ЛЮБУЮ локалку этой функции, в которой этот хендл находится или находился в процессе выполнения функции, нужно обнулить.
И прекратите цитировать комментарий целиком по нескольку раз в ответе.
05070000 -> local handle
00000487 -> её id
0C290500 -> literal register (type) location
13290000 -> push register
0C2A0500 -> literal register (type) location
132A0000 -> push register
15000000 -> callnative
00000314 -> id нативки
11000000 -> setvar
00000F7D -> id переменной
0E2B0700 -> get var register (type) Handle
00000F7D -> id переменной
112B0000 -> setvar register
00000487 -> id переменной
0E2C0700 -> get var register (type) Handle
00000F7D -> id перемнной
132C0000 -> push register
15000000 -> callnative
00000315 -> id нативки
0C000000 -> literal R0
27000000 -> return
А почему тут два раза callnative? Нативка же одна в примере, Location.
Скорее всего часть взята из дополненного примера, где есть RemoveLocation.
Не могу понять, почему в моём примере байткод начинается с
05070000 -> local handle
00000487 -> её id
В то время как в твоём примере ниже
05070000 -> local (type) handle
00000487 -> id переменной
Хотя обе функции начинаются с local location.
Думаю, тут какая-то ошибка.
Нужно исправить все ошибки и более подробно объяснить, в каких ситуациях возникает утечка, а в каких нет. И главное, почему утечка переменной вообще возникает:
3 фактических push, так как локальный реестр не был обнулён, то popstack (который вызывается всегда) решает его не трогать
мы СОЗДАЁМ переменную и присваиваем её в локальную переменную
Создаём объект
Простой ответ - сами переменные не утекают ни при каких обстоятельствах и они преобразуются в нечто статичное, и им выделена память единожды. Потому, утечки вызываются фактически банальной проблемой логики в самом коде, то бишь вы создали хендл, а затем его не удалили и так может повторяться уйму раз.
Ладно, тогда почему тут всё удаляется, а потребление ОЗУ растёт? В твоих примерах с группой и локацией переменная обнуляется.
Обнова была выпущена из-за того, что я улучшил файл clear-game-path.reg после внимательного изучения findpath.lua. До этого .reg файл очищал не все пути, и таким образом иногда JNGP всё же мог найти путь к вару. Сейчас это проблема исправлена. А переименование - приведение всех файлов в корневой папке к одному виду, без пробелов - просто дополнение.
» Администрация XGM / Правила пользования сайтом
Ред. PT153
» WarCraft 3 / Как заменить <Green Square DISBTN> на свою иконку?
Ред. PT153
» WarCraft 3 / Как добавить логову орков атаку без раба внутри.
1 триггер на вход раба, выход раба и каст абилки на выход всех - чекаем кол-во рабов внутри, если их 1 или больше, даём способность на + скорость атаки и ставим нужный уровень; если 0, то забираем способность.
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Как разблокировать выбор цвета игрока?
Ред. PT153
» WarCraft 3 / JNGP Tooltip помошник
У меня стоят такие версии.
» WarCraft 3 / JNGP Tooltip помошник
» WarCraft 3 / JNGP Tooltip помошник
» WarCraft 3 / Подсветка Memory hack API v1.4 в TESH
» WarCraft 3 / JNGP Tooltip помошник
Ред. PT153
» WarCraft 3 / Twilight's Eve Resurrection
» WarCraft 3 / Memory hack API v1.4
Ред. PT153
» WarCraft 3 / (Reforged) Как быть с игроками?
» WarCraft 3 / Jass MythBusters
Ред. PT153
» WarCraft 3 / Jass MythBusters
То есть, если создаётся хендл, то ЛЮБУЮ локалку этой функции, в которой этот хендл находится или находился в процессе выполнения функции, нужно обнулить.
Скорее всего часть взята из дополненного примера, где есть RemoveLocation.
Думаю, тут какая-то ошибка.
Ред. PT153
» WarCraft 3 / Jass MythBusters
Ред. PT153
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / JNGP: Rebuild от PT153
Обновление v1.3.1