я заметил что абилки пустышки которые нужны для способностей не ремоваются когда юнит мертв подскажи будет ли это функция правильно работать?
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

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

quq_CCCP:
Чето ваще не понятно причем тут удаление пассивок и таймеры?
Да и вовсе существует событие смети.
Ну и писанина вроде local unitstate life ...
Ну не ужели ты не понимаешь что нахрен ненужно, пишется сразу GetWidgetLife( unit, ) < 0.405 и корочее и нет никаких нахрен ненужных переменных, тоже самое с code, нет никакой надобности заносить в переменные, ибо указатель на функцию ты и так передаешь через function name.
она утекает
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
37
4 года назад
0
Ты про пассивки? Это может быть просто долгая анимация
0
7
4 года назад
0
ой я перепутал абилкоды они удаляются когда герой умирает
0
32
4 года назад
0
Чето ваще не понятно причем тут удаление пассивок и таймеры?
Да и вовсе существует событие смети.
Ну и писанина вроде local unitstate life ...
Ну не ужели ты не понимаешь что нахрен ненужно, пишется сразу GetWidgetLife( unit, ) < 0.405 и корочее и нет никаких нахрен ненужных переменных, тоже самое с code, нет никакой надобности заносить в переменные, ибо указатель на функцию ты и так передаешь через function name.
0
7
4 года назад
0
quq_CCCP:
Чето ваще не понятно причем тут удаление пассивок и таймеры?
Да и вовсе существует событие смети.
Ну и писанина вроде local unitstate life ...
Ну не ужели ты не понимаешь что нахрен ненужно, пишется сразу GetWidgetLife( unit, ) < 0.405 и корочее и нет никаких нахрен ненужных переменных, тоже самое с code, нет никакой надобности заносить в переменные, ибо указатель на функцию ты и так передаешь через function name.
она утекает
Принятый ответ
0
23
4 года назад
0
Ельнур, кто утекает лол!
1
32
4 года назад
1
pro100master, Сам Ельнур и утекает
0
37
4 года назад
0
xgm.guru/p/wc3/triggers-and-jass-optimization плохо читал статьи

но лучше начать с типов данных, а то с той статьей я бы тоже поспорил xgm.guru/p/wc3/w3datatypes
1
32
4 года назад
1
Ельнур, ты пожалуйста честно скажи мне, ты наркоман? Что такое утечки то хоть представляешь?
Тип code даже формально не хендл, и даже не отдельный тип, т.к в jass у тебя по идеи нет возможности чето сделать с указателем на код, т.к типы указаны строго. Code нужен лишь чтобы интерпретатор понял что ты передал в качестве аргумента указатель на функцию.
Удалять code как и плодить ты тоже не можешь стандартными средствами языка, даже boolexpr'ы не плохят указатели, условно все прибито гвоздями и функций в коде ровно столько, сколько ты описал, они не создаются динамически (если не рассматривать мемхак).
Насчет ваших 1.31+ и луа, там да может быть всякая чушь, но такое. В луа я там слышал что есть нечто отдаленно похожое и вовсе луа, такая же надстройка над виртуальной JASM машиной, но пока пруфов на русском (или инглише) нет, и я ничего не пишу по этому поводу, и вам слушать что попало тоже не советую.
0
7
4 года назад
0
quq_CCCP:
Ельнур, ты пожалуйста честно скажи мне, ты наркоман? Что такое утечки то хоть представляешь?
Тип code даже формально не хендл, и даже не отдельный тип, т.к в jass у тебя по идеи нет возможности чето сделать с указателем на код, т.к типы указаны строго. Code нужен лишь чтобы интерпретатор понял что ты передал в качестве аргумента указатель на функцию.
Удалять code как и плодить ты тоже не можешь стандартными средствами языка, даже boolexpr'ы не плохят указатели, условно все прибито гвоздями и функций в коде ровно столько, сколько ты описал, они не создаются динамически (если не рассматривать мемхак).
Насчет ваших 1.31+ и луа, там да может быть всякая чушь, но такое. В луа я там слышал что есть нечто отдаленно похожое и вовсе луа, такая же надстройка над виртуальной JASM машиной, но пока пруфов на русском (или инглише) нет, и я ничего не пишу по этому поводу, и вам слушать что попало тоже не советую.
если бы она не утекала то не было бы переменной code

chitaite eshe raz Обнуление
У переменных типа integer, real, boolean есть некая “область видимости”, по выходу из этой области – переменная удаляется. У всех остальных переменных этой “области” нет, а значит, их нужно обнулять вручную
set <переменная> = null
Если ее не обнулить, то она останется в памяти компьютера навсегда по протяжению игрового процесса, и тем самым в большом количестве будет вызывать тормоза!
0
37
4 года назад
Отредактирован ScorpioT1000
0
да, с code там свои тёрки, quq_CCCP лучше знает
0
23
4 года назад
0
code кеширует если что
0
26
4 года назад
0
а если не создать переменную, то и обнулять ее не придется. невероятно, правда?
0
32
4 года назад
0
Ещё раз, это когда ты создал объект и не удалил, то утечка - CreateItemLoc(Location(0,0),I000), создаст утечку, ибо кроме предмета была создана точка, новый игровой объект, который по идеи надо сначала записать в переменную, потом использовать, а после удалить, и обнулить переменную, чтобы игра не считала ссылку на предмет занятой.
Но code - это указатель на функцию, весь код твоей карты состоит из этих указателей к которым и обращается игра, их генерирует движок игры из скрипта, при загрузке карты, и сколько их было, столько и осталось, они не создаются динамически, да и удалить ты их не можешь, поэтому помещать их в переменные и обнулять незачем.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.