В общем искал я в инете и не нашел конкретно мой случай, может плохо искал..
Допустим есть глобалка/локалка не важно: GROUP={}
Далее я задаю на id юнита таблицу в таблице(наверное) GROUP[GetHandleId(unit)]={}
По нужде проверяю, если GROUP[GetHandleId(unit)][0]==nil значит создать группу GROUP[GetHandleId(unit)][0]=CreateGroup()
мне нужна еще группа по нужде и так же по нужде удалять таймером пример кода:
local caster_uid=GetHandleId(caster)
local group_index
if GROUP[caster_uid]==nil then
	GROUP[caster_uid]={}
end
if GROUP[caster_uid][0]==nil then
	GROUP[caster_uid]={[0]=CreateGroup()}
	group_index=0
else
	GROUP[caster_uid]={[1]=CreateGroup()}
	group_index=1
end

if BlzGroupGetSize(GROUP[caster_uid][group_index])>0 then
	TimerStart(CreateTimer(),4,false,function()
		DestroyGroup(GROUP[caster_uid][group_index])
		GROUP[caster_uid][group_index]=nil
		DestroyTimer(GetExpiredTimer())
	end)
end
Но когда проверяю другим таймером то , чего то она странно себя ведет, одна группа перебивается другой...Одну из групп показывает как nil
Правильно ли я делаю или тут огромная ошибка ?

Я полагаю, надо сравнивать вот так, ибо индексация идёт с 1.
GROUP[GetHandleId(unit)][1] == nil
Ну и нужно вот так присваивать.
GROUP[caster_uid][1] = CreateGroup()
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
8
PT153:
GROUP[caster_uid][1] = CreateGroup()
Спс бро вот это правильно
24
PT153, индексация идет с 1 только с точки зрения стандартных функций работы с таблицей-массивом, а при прямом обращении к элементам можно хоть с розового слоника нумерацию начинать. Тут проблема в другом - полностью перезаписывалась таблица когда не было одной из записей в ней.
21
А почему все в качестве индекса массива юзают цифры, можно же самого юнита поставить. Или так не стоит делать?
GROUP[unit][0]=CreateGroup()
28
ScopteRectuS, я думаю, что можно, ибо сам подобное буду использовать, но нужно помнить об этом и при удалении юнита убирать его из таблицы.
24
А почему все в качестве индекса массива юзают цифры
Лично я юзаю хендлы вместо юнитов чтобы не связываться лишний раз со сборщиком мусора и мнением вара о том, когда пора удалять юнита из памяти. Кроме того, это не точно, но вроде числовые ключи работают чуть быстрее объектных, даже если таблица не в режиме массива, а в режиме массива, когда записи идут подряд, без пропусков, числовые ключи гарантированно быстрее строковых и обьектных.
В мультиплеере разногласия со сборщиком мусора могут быть чреваты потенциальным десинком, поэтому перестраховуюсь. А вот в одиночных картах можно не просто юнита в качестве ключа использовать, а еще и перевести таблицу в режим слабых ссылок, чтобы запись полностью удалилась автоматически когда вар решит удалить юнита из памяти. Правда это не факт что произойдет при вашей жизни или при жизни текущей сессии карты, но это уже нюансы.
28
prog, если юнит есть, то вар не будет кикать из памяти его. Надо просто чистить удалённых юнитов.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.