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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
nvc123, тут в примере я просто указал тип интегер, на самом деле используются другие типы.
29
Делаешь структуру со своими данными и пихаешь структуру в юзердату.
28
nvc123, а какая разница какой тип?
всеравно, как доц сказал, через структуру атачишь
иначе могут быть конфликты
а так одна система атача и через неё работает всё остальное
22
я делаю так всегда если юнит вошел в регион карта, то увеличивает индификатор +1 и присвоит массив юнит, каждый созданый 128 раз юнитов, начинаю делать цикл на проверку массива если был удален то номер юнита через структур данные так как можно обрашать структуру как DataUnit(индификатор юнит)
21
Doc, не это не подходит. Я же сказал , что создаётся огромное количество юнитов, а в структуре 8192 по-моему только юнитов можно будет сохранить. если я правильно понял реализацию.
22
ScopteRectuS, 8000 это много зачем вам столько, макс в сражении во всех картах видел максимум 1к а ты хочеш 8к
21
pro100master, у меня юниты создаются каждые 0.16 секунд, и примерно с такой же скоростью дохнут...
22
ScopteRectuS, ты пойми тем больше юнитов то невозможно контрить игру и все ливнут в 1 очередь
21
pro100master, сил противодействующей стороны достаточно, чтобы сдержать такой натиск противников. Да и карту я делаю только для себя. Просто нравится копашится в редакторе карт.
28
ScopteRectuS, 8192 одновременно
если они дохнут то структуру нужно удалять
8192 юнитов одновременно игра всеравно не потянет
а чем тебе кстати не нравится вариант с очисткой хэша?
вызывай FlushChildHashtable(hashtable, GetHandleId( whichUnit )) при создании юнита
а потом пиши туда данные
всеравно если раньше там чтото и хранилось то новые данные это перезапишут
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.