Добавлен scopterectus
Привязываю к юниту что-то через хеш-таблицу, например:
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 - ловить UNIT_DEATH и чистить за ним
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
всеравно, как доц сказал, через структуру атачишь
иначе могут быть конфликты
а так одна система атача и через неё работает всё остальное
Отредактирован scopterectus
Отредактирован nvc123
если они дохнут то структуру нужно удалять
8192 юнитов одновременно игра всеравно не потянет
а чем тебе кстати не нравится вариант с очисткой хэша?
вызывай FlushChildHashtable(hashtable, GetHandleId( whichUnit )) при создании юнита
а потом пиши туда данные
всеравно если раньше там чтото и хранилось то новые данные это перезапишут
Отредактирован scopterectus