В общем искал я в инете и не нашел конкретно мой случай, может плохо искал..
Допустим есть глобалка/локалка не важно: 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()
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Хэштаблицы это костыльнй пережиток jass.
На lua можно же и так
a = {
	b = {
		c = {
			d = function()
				print('work')
			end
		}
	}
}
a.b.c.d()
ответ
ScopteRectuS:
Предполагаю, что делается через какой-то цикл перебором всех элементов таблицы, если элемент является функцией, то запустить.
Правильно предполагаете, но мануалы же никому неинтересны, проже же вопрос задать.
test   = { }
test.a = 123
test.b = true
function test.func0()
	print(0)
end
function test.func1()
	print(1)
end
function test.qab()
	print(2)
end

for k, v in pairs(test) do
	if type(v) == 'function' then
		print(k, ':')
		v()
	end
end
ответ
Документацию то для кого пишут?
DATA = {
	Heroes = {}
}
do
	local PickAHero = CreateTrigger()
	for i = 0, 9 do
		TriggerRegisterPlayerUnitEvent(PickAHero, Player(i), EVENT_PLAYER_UNIT_SELECTED)
	end
	TriggerAddAction(PickAHero, function()
		local hero    = GetTriggerUnit()
		local owner   = GetTriggerPlayer()
		local ownerID = GetPlayerId(owner)
		
		if IsUnitType(hero, UNIT_TYPE_HERO) then
			local x = GetPlayerTeam(owner) == 1 and -7271 or 7271
			local y = GetPlayerTeam(owner) == 1 and -55 or 55
			
			PanCameraToTimedForPlayer(owner, x, x, 0)
			SetUnitX(hero, x)
			SetUnitY(hero, y)
			
			SetUnitOwner(hero, owner, true)
			DATA.Heroes[ownerID] = hero
		end
	end)
end

28
Я полагаю, надо сравнивать вот так, ибо индексация идёт с 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, я думаю, что можно, ибо сам подобное буду использовать, но нужно помнить об этом и при удалении юнита убирать его из таблицы.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.