Решено Проблема с Tusk Snowball: не получается забрать NPC-союзника в шар (Lua)

Mixanikus

Новичок
12 Апр 2026
2
1
Проект
Tusk_academy
Всем привет!

Разрабатываю тренировочную карту для микроконтроля на герое Tusk. Столкнулся со специфической проблемой механики способности Snowball при взаимодействии с юнитами, созданными через скрипт.

Суть проблемы:
Я спавню союзного юнита (npc_dota_hero_sniper) через CreateUnitByName в команду игрока (DOTA_TEAM_GOODGUYS). Несмотря на то, что юнит является союзником, Tusk (игрок) не может забрать его в шар. При попытке кликнуть по нему во время подготовки Сноуболла ничего не происходит (в консоли иногда проскакивает invalid target).

Что уже пробовал:

  1. Устанавливал владельца через SetOwner(hero).
  2. Давал контроль игроку через SetControllableByPlayer(0, true).
  3. Пытался спавнить как через CreateUnitByName, так и через Tutorial:AddBot.
  4. Проверял наличие модификаторов — юнит чистый, но шар его «не видит».
Код спавна юнита

Lua:
local ally = CreateUnitByName("npc_dota_hero_sniper", spawnPos, true, nil, nil, hero:GetTeamNumber())
ally:SetOwner(hero)
ally:SetControllableByPlayer(hero:GetPlayerID(), true)
 
Советую посмотреть на реализацию спавна героев в режиме "Опробовать героя", там шар с союниками работает корректно. это тоже кастомка на самом деле, находится по пути "dota 2 beta\game\dota_addons\hero_demo"

Я кстати чекнул, и там используется функция DebugCreateHeroWithVariant (хотя Variant уже нет в игре :D )
Lua:
local hPlayer = PlayerResource:GetPlayer( 0 )
local sHeroToSpawn = "hero_name"
local nHeroVariant = 1
local nTeamNumber = DOTA_TEAM_GOODGUYS
DebugCreateHeroWithVariant( hPlayer, sHeroToSpawn, nHeroVariant, nTeamNumber, false,
        function( hAlly )
            hAlly:SetControllableByAllPlayers( true )
            hAlly:SetRespawnPosition( hPlayerHero:GetAbsOrigin() )
            FindClearSpaceForUnit( hAlly, hPlayerHero:GetAbsOrigin(), false )
            hAlly:Hold()
            hAlly:SetIdleAcquire( false )
            hAlly:SetAcquisitionRange( 0 )
            self:BroadcastMsg( "#SpawnAlly_Msg" )
        end )
По идее должно работать
 
Последнее редактирование:
  • Нравится
Реакции: Mixanikus
Советую посмотреть на реализацию спавна героев в режиме "Опробовать героя", там шар с союниками работает корректно. это тоже кастомка на самом деле, находится по пути "dota 2 beta\game\dota_addons\hero_demo"

Я кстати чекнул, и там используется функция DebugCreateHeroWithVariant (хотя Variant уже нет в игре :D )
Lua:
local hPlayer = PlayerResource:GetPlayer( 0 )
local sHeroToSpawn = "hero_name"
local nHeroVariant = 1
local nTeamNumber = DOTA_TEAM_GOODGUYS
DebugCreateHeroWithVariant( hPlayer, sHeroToSpawn, nHeroVariant, nTeamNumber, false,
        function( hAlly )
            hAlly:SetControllableByAllPlayers( true )
            hAlly:SetRespawnPosition( hPlayerHero:GetAbsOrigin() )
            FindClearSpaceForUnit( hAlly, hPlayerHero:GetAbsOrigin(), false )
            hAlly:Hold()
            hAlly:SetIdleAcquire( false )
            hAlly:SetAcquisitionRange( 0 )
            self:BroadcastMsg( "#SpawnAlly_Msg" )
        end )
По идее должно работать
Большое спасибо! Сработало
 
  • Нравится
Реакции: fabio_longo
Реклама: