Пробовал заменить на npc, но тогда выдает ошибку
attempt to call method 'GetAssignedHero' (a nil value)
Потому что ты пытаешься применить
GetAssignedHero к юниту. Все же явно написано. Эта функция тебе вообще не нужна, npc это и есть герой, ты же даже сделал проверку
IsRealHero() кстати лучше заменить просто на IsHero(), иначе будут иллюзии палиться.
При первом спавне
PlayerResource:GetPlayer(npc:GetPlayerID()):GetAssignedHero() действительно не находит героя, хз почему. При респавне работает. Можно было бы таймер создать, но делать этого не стоит.
Когда ты спавнишь героя командой,
PlayerResource:GetPlayer(npc:GetPlayerID()) возвращает именно тебя (как игрока), поэтому при применении туда
GetAssignedHero() получается твой основной герой. И надпись дается именно ему, а не боту.
При создании шестого бота происходит полуошибка, в результате которой владельцем героя становится "призрак", и у него уже только один герой, поэтому
GetAssignedHero() для него срабатывает как надо.
Короче предыдущий блок текста можешь игнорировать, просто используй npc в качестве аргумента (последнюю проверку вообще выпыли), это решает обе проблемы (проверено).