Создание юнита в addon_game_mode и назначение контроля игроку.

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
У меня есть функция OnGameInProgress. Вызывается она, когда GameRules:State_Get() меняется на DOTA_GAMERULE_STATE_IN_PROGRESS.
Мне нужно, чтобы в этой функции создавалась группа крипов и они давались под контроль игроку с PlayerID == 0, ну так вот, я создаю юнитов, даю контроль, и я могу их выделять, под ними появляется белый круг, как будто я могу ими управлять, но они не слушают меня и продолжают стоять на месте, что бы я не делал. Вот код:
Код:
local target1 = Entities:FindByName( nil, "target1"):GetAbsOrigin()
local untitcreep1 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep1,target1,false)
		untitcreep1:SetControllableByPlayer(0, false)
		local untitcreep2 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep2,target1,false)
		untitcreep2:SetControllableByPlayer(0, false)
		local untitcreep3 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep3,target1,false)
		untitcreep3:SetControllableByPlayer(0, false)
		local untitcreep4 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep4,target1,false)
		untitcreep4:SetControllableByPlayer(0, false)
		local untitcreep5 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep5,target1,false)
		untitcreep5:SetControllableByPlayer(0, false)
		local untitcreep6 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, nil, nil, DOTA_TEAM_GOODGUYS)
		FindClearSpaceForUnit(untitcreep6,target1,false)
		untitcreep6:SetControllableByPlayer(0, false)
Все это в функции OnGameInProgress()
У меня hNPCOwner, hUnitOwner стоят на nil, потому что я не знаю, как передать Entity героя в эту функцию и Owner этого ентити. Может причина в этом. Ошибок никаких нет.
 
Последнее редактирование модератором:
Я вот так задавал когда-то контроль над юнитом:

Код:
unit:SetOwner(hero)
unit:SetControllableByPlayer( hero:GetPlayerOwnerID(), true )

Где hero:
Код:
.... 
function HDGSurvival:OnNPCSpawn(data)
local hero = EntIndexToHScript(data.entindex)

if hero:IsHero() then
....

Видимо, нужно две функции. Кроме того, неуверен, но пока игрок не заспавнится, может индекса то у него и нет. Попробуй давать контроль во время спавна.

А так, игрока можешь так получить:

Код:
if PlayerResource:IsValidPlayer(0) then
	local player = PlayerResource:GetSelectedHeroEntity(0)
end
 
Илья, спасибо, заработало
Код:
if PlayerResource:IsValidPlayer(0) then
     local player = PlayerResource:GetSelectedHeroEntity(0)
     local untitcreep1 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep1,target1,false)
     untitcreep1:SetControllableByPlayer(0, false)
     untitcreep1:SetOwner(player)
     local untitcreep2 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep2,target1,false)
     untitcreep2:SetControllableByPlayer(0, false)
     untitcreep2:SetOwner(player)
     local untitcreep3 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep3,target1,false)
     untitcreep3:SetControllableByPlayer(0, false)
     untitcreep3:SetOwner(player)
     local untitcreep4 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep4,target1,false)
     untitcreep4:SetControllableByPlayer(0, false)
     untitcreep4:SetOwner(player)
     local untitcreep5 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep5,target1,false)
     untitcreep5:SetControllableByPlayer(0, false)
     untitcreep5:SetOwner(player)
     local untitcreep6 = CreateUnitByName("npc_dota_creep_goodguys_melee", target1, true, player, player:GetOwner(), DOTA_TEAM_GOODGUYS)
     FindClearSpaceForUnit(untitcreep6,target1,false)
     untitcreep6:SetControllableByPlayer(0, false)
     untitcreep6:SetOwner(player)
   end
 
Последнее редактирование модератором:
ChAK_NORRIS.gif
 
Реклама: