Привязываю к юниту что-то через хеш-таблицу, например:
	call SaveInteger( hashtable, GetHandleId( whichUnit ), 0, integer )
Но привязываю, только, если ранее к этому юниту не привязывалось, то есть:
	if not HaveSavedInteger( hashtable, GetHandleId( whichUnit ), 0 ) then
		call SaveInteger( hashtable, GetHandleId( whichUnit ), 0, integer )
	endif
Так вот, проблема вот в чем: на карте создаётся огромное количество юнитов и к ним крепятся данные, как написано выше. Эти юниты удаляются после смерти и их хендл освобождается, для другого нового созданного юнита. И в итоге, я к юниту не могу что-либо крепить, потому что проверка выдаёт, что в хеш-таблице по данному ключу уже что-то сохранено, потому что новый юнит занял хендл старого юнита. Как это обойти?

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

вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2 комментария удалено
0
16
7 лет назад
0
вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
Принятый ответ
Этот комментарий удален
0
28
7 лет назад
Отредактирован Кет
0
DracoL1ch, я бы 2 вариант юзал
с первым могут быть проблемы если есть арифметика с хэндлами
да и делать намеренную утечку памяти вместо того чтобы просто чистить за собой данные это какой-то жуткий костыль
0
16
7 лет назад
0
nvc123:
это не утечка, это сохранение id хендла, не более. на память не влияет от слова никак, разрушь объект - и сборщик его уберет.
0
29
7 лет назад
0
ну если ты ловишь юнит_дес и чистишь табличку а там вдруг ульт паладина то действительно будет баг.
0
28
7 лет назад
Отредактирован nvc123
0
Doc, ну так учитывать рес надо, это всегда при отлове смерти проверять надо
DracoL1ch, на память это влияет как минимум тем что хэш таблица забита не используемыми значениями
2
26
7 лет назад
2
что бы не было непоняток с ультой паладина, можно удалять значения таблицы по мере того как труп разложился до такой степени, что уже не сможет быть воскрешен. банальный таймер.
0
16
7 лет назад
0
А еще можно просто не юзать ульт паладина. Ну а мусорка в хештаблице у ТС и так, и так
0
7
7 лет назад
0
GetUnitTypeId() вернет рав-код юнита, даже если он разлагается, что может помочь в поиске мусора
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.