Не понимаю где я сделал, что не так. В таблицу DATA.HEROES[ID] то есть в ячейку Player0 должно присвоиться GetTriggerUnit() (При условии что это игрок красный)
Но при тестировании print не выдаёт результатов...
Help (:
DATA = {
    Heroes = {Player0 = nil, Player1 = nil, Player2 = nil, Player3 = nil, Player4 = nil, -- Alliance
              Player5 = nil, Player6 = nil, Player7 = nil, Player8 = nil,Player9 = nil} -- Horde
}

do
    local PickAHero = CreateTrigger()
    for i = 0, 10 - 1 do
        TriggerRegisterPlayerUnitEvent(PickAHero, Player(i), EVENT_PLAYER_UNIT_SELECTED)
    end
    TriggerAddAction(PickAHero, function()
        local pHero = GetTriggerUnit()
        local tPlayer = GetTriggerPlayer()
        local ID = GetPlayerId(tPlayer)
        if IsUnitType(pHero,UNIT_TYPE_HERO) then
            if GetPlayerTeam(tPlayer) == 1 then
                PanCameraToTimedForPlayer(tPlayer,-7271,-55,0.)
                SetUnitX(pHero,-7271)
                SetUnitY(pHero,-55)
            else
                PanCameraToTimedForPlayer(tPlayer,7271,55,0.)
                SetUnitX(pHero,7271)
                SetUnitY(pHero,55)
            end
            SetUnitOwner(pHero,tPlayer,true)
            table.insert (DATA.Heroes,ID,pHero) 
            print(DATA.Heroes.Player0)
        end
    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
`
ОЖИДАНИЕ РЕКЛАМЫ...
24
Перечитайте еще раз как работают таблицы. Lua не умеет в ясновидение и самостоятельно не может догадаться что строка Player0 и номер игрока это одно и то же.
Можно инициализировать Heroes так - Heroes = {nil,nil,nil,nil,nil,nil,nil,nil} и потом обращаться по индексу DATA.Heroes[ID], но тогда и запись в эту таблицу и получение данных из неё будет только по индексу. А для обращения вида DATA.Heroes.Player0 нужно чтобы данные попадали как-то в эту таблицу по строковому ключу, например так DATA.Heroes["Player"..ID], но это крайне медленный способ и лучше все-же обходиться индексами.
30
Можно инициализировать Heroes так - Heroes = {nil,nil,nil,nil,nil,nil,nil,nil}
Зачем лишний раз nil писать? Можно и просто Heroes = {}. Меня больше смущает EVENT_PLAYER_UNIT_SELECTED.

А цикл нужно начинать for i = 1 - 1, 10 - 1 do для полной красоты))
24
Зачем лишний раз nil писать?
Исключительно из тех соображений что в исходном варианте была не менее бесполезная инициализация строковых ключей через nil.
30
Документацию то для кого пишут?
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
Принятый ответ
15
Спасибо, что без издевательских nil,nil,nil =)
Да, нужно учить Lua и прекращать пытаться его использовать как Jass...
30
Спасибо, что без издевательских nil,nil,nil =)
Только учтите, что там проверок нет, игроки могут завыделять чужих героев. Можно доделать таким образом
if IsUnitType(hero, UNIT_TYPE_HERO) and GetOwningPlayer(hero) == Player(PLAYER_NEUTRAL_PASSIVE) then
	local x = GetPlayerTeam(owner) == 1 and -7271 or 7271
	local y = GetPlayerTeam(owner) == 1 and -55 or 55
	
	if DATA.Heroes[ownerID] ~= nil then
		PanCameraToTimedForPlayer(owner, x, x, 0)
		SetUnitX(hero, x)
		SetUnitY(hero, y)
		
		SetUnitOwner(hero, owner, true)
		DATA.Heroes[ownerID] = hero
	end
end
нужно учить Lua и прекращать пытаться его использовать как Jass
jass головного мозга тяжело лечится))
Чтобы оставить комментарий, пожалуйста, войдите на сайт.