Ну, проблема с петами так действительно решается. Записывать урон петов в таблицу хозяина - это заманчиво, я тоже никогда не использовал "MasterAndPet"->false. Но не я строил - не мне ломать, а добавить пета динамически тоже не сложно.
А с ПУ там хитрее. Когда бьёт чужой ПУ, приходят EVENT_UNIT_DAMAGE_RECEIVED с params.source=nil и params.sourceName="". И даже когда это мой убийца, первый и последний удар приходят так же. Поэтому и приходится крутиться: просмотри всех мистиков, посмотри у кого висит баф "хозяин ПУ", но его ПУ не бил последние 1.5 секунды... А когда это последний удар - то баф уже слетел, и надо совсем выкручиваться... Вот и получилось счастья на 60 строк. Когда оно обрабатывало только params.sourceName="Призрачный убийца", оно тоже просто было...
А unit.GetFollowerMaster - это есть какая-то более полная документация? Или просто надо список всех функций смотреть? А то для меня это недокументированная функция.