Привязываю к юниту что-то через хеш-таблицу, например:
	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 и чистить за ним
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
ну если ты ловишь юнит_дес и чистишь табличку а там вдруг ульт паладина то действительно будет баг.
28
Doc, ну так учитывать рес надо, это всегда при отлове смерти проверять надо
DracoL1ch, на память это влияет как минимум тем что хэш таблица забита не используемыми значениями
26
что бы не было непоняток с ультой паладина, можно удалять значения таблицы по мере того как труп разложился до такой степени, что уже не сможет быть воскрешен. банальный таймер.
16
А еще можно просто не юзать ульт паладина. Ну а мусорка в хештаблице у ТС и так, и так
7
GetUnitTypeId() вернет рав-код юнита, даже если он разлагается, что может помочь в поиске мусора
21
Ige, GetUnitTypeId() вернет же одинаковое значение для одинаковых юнитов.
7
ScopteRectuS, как делаю я
Когда креплю данные к юниту через хт, добавляю его в группу. По группе периодически пробегаюсь, ищу несуществующих юнитов (GetUnitTypeId() вернет 0, если юнита больше нет на карте) и если нахожу, то очищаю данные в хт.
22
самый оптимальный это юнит покинул облость вся карта... после чего можно уже его удалить данные покинувший есть уже наработка index unit
21
Ige, а как же (unit == null) ?
pro100master, я думаю, это не сработает. Т.к. юнит покинет игровую карту только тогда, когда он плоностью разложится (а если труп разлагается полностью - игра его удаляет). Соответственно когда заюзаешь функцию получения юнита, покунувшего регион, игра вернет null.
28
есть ещё 1 способ
атачить через юзер дату и не юзать хэндлы
21
nvc123, тут в примере я просто указал тип интегер, на самом деле используются другие типы.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.