После разложения юнита его хэндл освобождается с хэш-таблицы?
Может ли юнит, которые появился занять хэндл юнита, который был разложен?

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

После разложения юнита его хэндл освобождается с хэш-таблицы?
Нет. Он остается в памяти до выхода из карты (если тип разложения на это никак не влияет)
Может ли юнит, которые появился занять хэндл юнита, который был разложен?
Может. И это может быть не только юнит.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
А еще лучше - скинуть ссыль на какую-нибудь статью со списком callчто-то там команд.
ответ
ClotPh, это локалка. Нет вообще никакой разницы как ты ее назовешь. Должен скопетанить ©, ибо опасаюсь что ирония Дока может быть не замечена.

0
21
5 лет назад
0
После разложения юнита его хэндл освобождается с хэш-таблицы?
Нет. Он остается в памяти до выхода из карты (если тип разложения на это никак не влияет)
Может ли юнит, которые появился занять хэндл юнита, который был разложен?
Может. И это может быть не только юнит.
Принятый ответ
0
19
5 лет назад
0
Может. И это может быть не только юнит.
И что делать с этим?
То есть эта система будет некорректно работать?
0
28
5 лет назад
0
Хеш-таблицу точно чистить надо, а то дикие баги начнутся.
KaneThaumaturge:
И что делать с этим?
При смерти юнита удалять все связанные с ним записи в хеше, вот и всё решение.
0
19
5 лет назад
0
При смерти юнита удалять все связанные с ним записи в хеше, вот и всё решение.
эхх, хорошо, а как чистить? Потому что, помню, сохранял null, а загружало прошлого юнита.
0
28
5 лет назад
0
Потому что, помню, сохранял null, а загружало прошлого юнита.
common.j в помощь.
native  RemoveSavedInteger					takes hashtable table, integer parentKey, integer childKey returns nothing
native  RemoveSavedReal						takes hashtable table, integer parentKey, integer childKey returns nothing
native  RemoveSavedBoolean					takes hashtable table, integer parentKey, integer childKey returns nothing
native  RemoveSavedString					takes hashtable table, integer parentKey, integer childKey returns nothing
native  RemoveSavedHandle					takes hashtable table, integer parentKey, integer childKey returns nothing

native  FlushParentHashtable						takes hashtable table returns nothing
native  FlushChildHashtable					takes hashtable table, integer parentKey returns nothing
А ещё вот такое есть.
native  HaveSavedInteger					takes hashtable table, integer parentKey, integer childKey returns boolean
native  HaveSavedReal						takes hashtable table, integer parentKey, integer childKey returns boolean
native  HaveSavedBoolean					takes hashtable table, integer parentKey, integer childKey returns boolean
native  HaveSavedString					    takes hashtable table, integer parentKey, integer childKey returns boolean
native  HaveSavedHandle     				takes hashtable table, integer parentKey, integer childKey returns boolean
2
21
5 лет назад
Отредактирован Raised
2
KaneThaumaturge, если ты удаляешь объект наследующий тип handle из карты, его id освобождается (правда, не мгновенно, а когда до него доберется сборшик мусора). После этого этот же id может быть использован для любого другого хендла. На этом же принципе работают и счетчики хендлов.
0
19
5 лет назад
Отредактирован KaneThaumaturge
0
native FlushParentHashtable takes hashtable table returns nothing
native FlushChildHashtable takes hashtable table, integer parentKey returns nothing
Это очистка хэш таблицы, а то очистка по ключу?
PT153:
native HaveSavedIntegertakes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedRealtakes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedBooleantakes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedStringtakes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedHandle takes hashtable table, integer parentKey, integer childKey returns boolean
А это что?
0
21
5 лет назад
0
KaneThaumaturge, пожалуйста используй поиск. В своей статье Ханабиши весьма доступно это расписал.
0
19
5 лет назад
0
Raised, хорошо, спасибо.
0
28
5 лет назад
Отредактирован PT153
0
А это что?
Как у тебя с английским?
Have значит владеть, Saved значит сохранённый, эти функции отвечают на вопрос, а сохранено ли что-нибудь в такой-то в таблице по таким-то ключам.
KaneThaumaturge:
Это очистка хэш таблицы, а то очистка по ключу?
Да, первая чистит всю таблицу, вторая чистит только те ячейки в таблице, что имеют указанный parent ключ.
0
19
5 лет назад
0
PT153, да, я уже понял, с английским все туго. Хоть я и знаю отдельно значение слов Have, Saved, String, но мне почему-то просто лень переводить. Я посмотрел на аргументы и уже понял, спасибо.
Буду вместо GetHandleId использовать UnitUserData, но очищать все буду. Всем спасибо.
0
32
5 лет назад
0
KaneThaumaturge, Ну а чем плох GetHandleId()?
0
19
5 лет назад
0
quq_CCCP, ну UnitUserData повторяться не будет, хоть я и буду очищать хэштаблицу. Ну не знаю даже. (предрассудки)
0
32
5 лет назад
0
а можно тут свой вопрос задать, допустим я в хештаблице записал лишь интежер данные в ячейки 1 и 2, просто я всегда использовал FlushChildHeshtable вместо RemoveSavedInteger, сильно будет ли разница? останутся ли утечки при RemoveSavedInteger, (я знаю что другие ячейки не использую) да и юнит будут вообще удалён вскоре...
0
16
5 лет назад
Отредактирован DracoL1ch
0
если можешь чистить через FlushChildHeshtable , то чисти через неё, RemoveSaved* не уничтожает ветку хештаблицы, даже если это была единственная запись в неё
0
32
5 лет назад
0
DracoL1ch, ну значит я всё правильно делал, я просто не помню даже почему так делаю, столько времени прошло (лет 7-8 после первого знакомства с хештаблицами), и просто на каком то автопилоте всё делается
0
32
5 лет назад
0
KaneThaumaturge:
quq_CCCP, ну UnitUserData повторяться не будет, хоть я и буду очищать хэштаблицу. Ну не знаю даже. (предрассудки)
А какая разница будут или не будут, если юнита уже нету? Потом создаешь триггер с событием юнит сдох, и следишь за юнитами, если это критично.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.