Привязываю к юниту что-то через хеш-таблицу, например:
	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
29
7 лет назад
0
Делаешь структуру со своими данными и пихаешь структуру в юзердату.
0
28
7 лет назад
0
nvc123, а какая разница какой тип?
всеравно, как доц сказал, через структуру атачишь
иначе могут быть конфликты
а так одна система атача и через неё работает всё остальное
0
23
7 лет назад
0
я делаю так всегда если юнит вошел в регион карта, то увеличивает индификатор +1 и присвоит массив юнит, каждый созданый 128 раз юнитов, начинаю делать цикл на проверку массива если был удален то номер юнита через структур данные так как можно обрашать структуру как DataUnit(индификатор юнит)
0
21
7 лет назад
Отредактирован scopterectus
0
Doc, не это не подходит. Я же сказал , что создаётся огромное количество юнитов, а в структуре 8192 по-моему только юнитов можно будет сохранить. если я правильно понял реализацию.
0
23
7 лет назад
0
ScopteRectuS, 8000 это много зачем вам столько, макс в сражении во всех картах видел максимум 1к а ты хочеш 8к
0
20
7 лет назад
0
Ресайклинг в помощь
0
21
7 лет назад
0
pro100master, у меня юниты создаются каждые 0.16 секунд, и примерно с такой же скоростью дохнут...
0
23
7 лет назад
0
ScopteRectuS, ты пойми тем больше юнитов то невозможно контрить игру и все ливнут в 1 очередь
0
21
7 лет назад
0
pro100master, сил противодействующей стороны достаточно, чтобы сдержать такой натиск противников. Да и карту я делаю только для себя. Просто нравится копашится в редакторе карт.
0
28
7 лет назад
Отредактирован nvc123
0
ScopteRectuS, 8192 одновременно
если они дохнут то структуру нужно удалять
8192 юнитов одновременно игра всеравно не потянет
а чем тебе кстати не нравится вариант с очисткой хэша?
вызывай FlushChildHashtable(hashtable, GetHandleId( whichUnit )) при создании юнита
а потом пиши туда данные
всеравно если раньше там чтото и хранилось то новые данные это перезапишут
0
21
7 лет назад
Отредактирован scopterectus
0
ScopteRectuS:
biridius, нашел еще такую функцию:
	native RemoveSavedInteger takes hashtable table, integer parentKey, integer childKey returns nothing
думаю, она идеально сюда подходит.
nvc123, здесь я уже нашел решение. Но так как здесь продолжили отвечать, я читал, и думал, что могут подсказать решение по-лучше. И действительно, годных ответов было много.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.