CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн I_GRIN_I

  • Продвинутый
  • 384
  • Мощь: 6
  • Научиться бы скриптить...
У меня есть функция 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 этого ентити. Может причина в этом. Ошибок никаких нет.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Я вот так задавал когда-то контроль над юнитом:

Код
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
« Последнее редактирование: 31-08-2016, 18:49:46 от Илья »

Оффлайн I_GRIN_I

  • Продвинутый
  • 384
  • Мощь: 6
  • Научиться бы скриптить...
Илья, спасибо, заработало
Спойлер
Код
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
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16