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

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