я заметил что абилки пустышки которые нужны для способностей не ремоваются когда юнит мертв подскажи будет ли это функция правильно работать?
function DebugDeath1 takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(Hash,GetHandleId(t),1,u)
local unitstate life = UNIT_STATE_LIFE
if GetUnitState(u,life) > 0.405 then
call UnitRemoveAbility(u,abilcode)
call FlushChildHashtable(Hash,GetHandleId(t))
call DestroyTimer(t)
endif
set life = null
set u = null
set t = null
endfunction
function DebugDeath takes unit u, integer abilcode returns nothing
local unitstate life = UNIT_STATE_LIFE
local timer t = CreateTimer()
local code cot = function DebugDeath1
if GetUnitState(u,life) <= 0.405 then
call TimerStart(t,1.00,true,cot)
call SaveUnitHandle(Hash,GetHandleId(t),1,u)
call SaveInteger(Hash,GetHandleId(t),2,abilcode)
endif
endfunction
Тип code даже формально не хендл, и даже не отдельный тип, т.к в jass у тебя по идеи нет возможности чето сделать с указателем на код, т.к типы указаны строго. Code нужен лишь чтобы интерпретатор понял что ты передал в качестве аргумента указатель на функцию.
Удалять code как и плодить ты тоже не можешь стандартными средствами языка, даже boolexpr'ы не плохят указатели, условно все прибито гвоздями и функций в коде ровно столько, сколько ты описал, они не создаются динамически (если не рассматривать мемхак).
Насчет ваших 1.31+ и луа, там да может быть всякая чушь, но такое. В луа я там слышал что есть нечто отдаленно похожое и вовсе луа, такая же надстройка над виртуальной JASM машиной, но пока пруфов на русском (или инглише) нет, и я ничего не пишу по этому поводу, и вам слушать что попало тоже не советую.
У переменных типа integer, real, boolean есть некая “область видимости”, по выходу из этой области – переменная удаляется. У всех остальных переменных этой “области” нет, а значит, их нужно обнулять вручную
set <переменная> = null
Если ее не обнулить, то она останется в памяти компьютера навсегда по протяжению игрового процесса, и тем самым в большом количестве будет вызывать тормоза!
Отредактирован ScorpioT1000
Но code - это указатель на функцию, весь код твоей карты состоит из этих указателей к которым и обращается игра, их генерирует движок игры из скрипта, при загрузке карты, и сколько их было, столько и осталось, они не создаются динамически, да и удалить ты их не можешь, поэтому помещать их в переменные и обнулять незачем.