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

Принятый ответ

Функция воскрешения боевой единицы:
    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" ) )
Загруженные файлы

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
30
6 лет назад
Отредактирован Clamp
0
оно действует на всех юнитов, а нужно их отсеивать по уровню, игроку, типу юнита
В РО указываешь нужному типу юнитов какую-нибудь неиспользуемую классификацию и соответственно настраиваешь допустимые цели в спеле.
Кроме того, спелу можно указать дальность воздействия 1.0 и создавать/передвигать даммика чётко в координаты воскрешаемого юнита.
Да и создавать 20 даммиков при каждом касте плохая идея, не оптимальная.
Создай одного и пользуйся только им, передвигая в позицию умершего юнита.
собственно, так в целом и стоит делать
0
20
6 лет назад
0
вопрос похожий поднимался с неделю назад
еще раз про замену - это ПОЛНОЕ УДАЛЕНИЕ старого юнита и СОЗДАНИЕ НОВОГО на месте прежнего
все
старый теряется, совсем, абсолютно и навсегда, а также все связанные с ним данные и висящие на нем кастом велью и прочее
0
17
6 лет назад
0
Clamp, Если так то легче просто использовать точки для наложения спецеффекта и удалять их. чем парится с даммиками.
0
30
6 лет назад
0
Для применения "воскрешения" нужен даммик.
2
21
6 лет назад
Отредактирован scopterectus
2
Функция воскрешения боевой единицы:
    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" ) )
Загруженные файлы
Принятый ответ
2
30
6 лет назад
2
ScopteRectuS, область воздействия 0.0 есть вся карта, ЕМНИП.
0
21
6 лет назад
Отредактирован scopterectus
0
Clamp, нет, ( 0.0 == бесконечность ) лишь в тех случаях, когда речь идёт о времени действия. В остальных случаях (здесь точно) - 0.0 считается как ноль, а не бесконечность.
0
17
6 лет назад
0
ScopteRectuS, Даже в случае со временем 0 не всегда бесконечность
ScopteRectuS, Попробую с этим что-то сделать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.