Сделал триггерное воскрешение чтоб можно было воскрешать конкретных юнитов и поставить разные условия, но эффект не крепится к заменённому юниту, думаю потому что гуи действие замены удаляет старого и создаёт нового юнита, но как мне прикрепить спецэффект? Пока из того что приходит в голову только создание точки в месте воскрешения, а потом её удаление, есть ли способ легче?

Функция воскрешения боевой единицы:
    function ReviveUnit takes unit whichUnit returns boolean
        if IsUnitType( whichUnit, UNIT_TYPE_HERO ) then
            return ReviveHero( whichUnit, GetUnitX( whichUnit ), GetUnitY( whichUnit ), false )

        elseif ( reviverUnit != null ) then
            call SetUnitX( reviverUnit, GetUnitX( whichUnit ) )
            call SetUnitY( reviverUnit, GetUnitY( whichUnit ) )
            return IssueImmediateOrderById( reviverUnit, 852094 )

        else
            set reviverUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), DUMMY_UNIT_ID, GetUnitX( whichUnit ), GetUnitY( whichUnit ), 0.0 )
            call UnitAddAbility( reviverUnit, 'Aloc' )
            call SetUnitInvulnerable( reviverUnit, true )
            call UnitAddAbility( reviverUnit, 'A016' ) // Воскрешение Паладина.
            call SetUnitPathing( reviverUnit, false )

            return IssueImmediateOrderById( reviverUnit, 852094 )
        endif

        return false
    endfunction
Воскрешение Паладина:
Иначе:
Я бы не рекомендавал использовать Replace Unit, но если Вы этого так хотите, то замените "GetEnumUnit( )" на "bj_lastReplacedUnit" при создании эффекта. И перенесите это ниже функции Replace Unit.
P. S:
А еще эффекты можно удалять сразу же после их создания. В Вашем случае это будет выглядеть как:
	сall DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl", bj_lastReplacedUnit, "origin" ) )
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
Почему бы не воскрешать заклинанием "воскрешение" (ультимейт палладина) через дамми-каст?
17
Clamp, Потому что оно действует на всех юнитов, а нужно их отсеивать по уровню, игроку, типу юнита. Да и создавать 20 даммиков при каждом касте плохая идея, не оптимальная.
30
оно действует на всех юнитов, а нужно их отсеивать по уровню, игроку, типу юнита
В РО указываешь нужному типу юнитов какую-нибудь неиспользуемую классификацию и соответственно настраиваешь допустимые цели в спеле.
Кроме того, спелу можно указать дальность воздействия 1.0 и создавать/передвигать даммика чётко в координаты воскрешаемого юнита.
Да и создавать 20 даммиков при каждом касте плохая идея, не оптимальная.
Создай одного и пользуйся только им, передвигая в позицию умершего юнита.
собственно, так в целом и стоит делать
20
вопрос похожий поднимался с неделю назад
еще раз про замену - это ПОЛНОЕ УДАЛЕНИЕ старого юнита и СОЗДАНИЕ НОВОГО на месте прежнего
все
старый теряется, совсем, абсолютно и навсегда, а также все связанные с ним данные и висящие на нем кастом велью и прочее
17
Clamp, Если так то легче просто использовать точки для наложения спецеффекта и удалять их. чем парится с даммиками.
30
Для применения "воскрешения" нужен даммик.
21
Функция воскрешения боевой единицы:
    function ReviveUnit takes unit whichUnit returns boolean
        if IsUnitType( whichUnit, UNIT_TYPE_HERO ) then
            return ReviveHero( whichUnit, GetUnitX( whichUnit ), GetUnitY( whichUnit ), false )

        elseif ( reviverUnit != null ) then
            call SetUnitX( reviverUnit, GetUnitX( whichUnit ) )
            call SetUnitY( reviverUnit, GetUnitY( whichUnit ) )
            return IssueImmediateOrderById( reviverUnit, 852094 )

        else
            set reviverUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), DUMMY_UNIT_ID, GetUnitX( whichUnit ), GetUnitY( whichUnit ), 0.0 )
            call UnitAddAbility( reviverUnit, 'Aloc' )
            call SetUnitInvulnerable( reviverUnit, true )
            call UnitAddAbility( reviverUnit, 'A016' ) // Воскрешение Паладина.
            call SetUnitPathing( reviverUnit, false )

            return IssueImmediateOrderById( reviverUnit, 852094 )
        endif

        return false
    endfunction
Воскрешение Паладина:
Иначе:
Я бы не рекомендавал использовать Replace Unit, но если Вы этого так хотите, то замените "GetEnumUnit( )" на "bj_lastReplacedUnit" при создании эффекта. И перенесите это ниже функции Replace Unit.
P. S:
А еще эффекты можно удалять сразу же после их создания. В Вашем случае это будет выглядеть как:
	сall DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl", bj_lastReplacedUnit, "origin" ) )
Загруженные файлы
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.