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

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

БезликийСектант, чтобы использовать выбранных юнитов, сначала их нужно выбрать, а у тебя этого нет.
Вот. Сделал наработку выбора. Замени пехотинца на рудокопа и Безумие на твою способность.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

ответ
Эм есть и другая аура лечение для союзников без заклинание. Это "Дух целитель" рав-код Aoar
ответ
Реализовал через второй вариант:
Дальше пришла в голову другая идея. Думаю, можно сделать с помощью ремонта зданий Альянса: на месте смерти героя создаётся здание с моделью креста со здоровьем 1/100 ед., а союзные герои ремонтируя крест будут повышать её здоровье, получается некая иллюзия прогресс бара. И если спрятать способность ремонта с помощью функции HideAbilityButton( ) из мемхака, то будет ли она срабатывать при нажатии на ПКМ? Также, как отловить момент полного ремонта здания? С помощью таймера проверять процент здоровья каждые доли секунды?
раскрыть
scope HeroRevive initializer Initialization


    struct herorevive
        private                    unit           dyingUnit
        private                    unit           reincarnate
        private                    real           life

        private                    thistype       prev
        private                    thistype       next

        public   static  constant  trigger        trig    =  CreateTrigger( )
        public   static  constant  timer          period  =  CreateTimer( )


        private static method iterate takes nothing returns nothing
            local  thistype  this  =  thistype( 0 ).next

            loop
                exitwhen ( this == 0 )

                if ( GetWidgetLife( this.reincarnate ) > this.life ) then
                    set  this.life  =  GetWidgetLife( this.reincarnate )

                elseif ( GetWidgetLife( this.reincarnate ) >= GetUnitState( this.reincarnate, UNIT_STATE_MAX_LIFE ) ) then
                    call ReviveHero( this.dyingUnit, GetUnitX( this.dyingUnit ), GetUnitY( this.dyingUnit ), true )
                    call RemoveUnit( this.reincarnate )

                    set  this.reincarnate  =  null
                    set  this.life         =  0.0

                    set  this.prev.next    =  this.next
                    set  this.next.prev    =  this.prev

                    if ( thistype( 0 ).next == 0 ) then
                        call PauseTimer( thistype.period )
                    endif

                    call thistype.deallocate( this )

                elseif ( GetWidgetLife( this.reincarnate ) <= this.life ) then
                    set  this.life  =  1.0
                    call SetWidgetLife( this.reincarnate, this.life )
                endif

                set this = this.next

            endloop
        endmethod


        public static method actions takes nothing returns nothing
            local  thistype  this  =  thistype.allocate( )

            set  this.next         =  0
            set  this.prev         =  thistype( 0 ).prev
            set  this.next.prev    =  this
            set  this.prev.next    =  this

            set  this.dyingUnit    =  GetDyingUnit( )
            set  this.reincarnate  =  CreateUnit( GetOwningPlayer( this.dyingUnit ), 'h003', GetUnitX( this.dyingUnit ), GetUnitY( this.dyingUnit ), 0.0 )
            set  this.life         =  1.0

            call SetUnitPathing( this.reincarnate, false )
            call SetWidgetLife( this.reincarnate, this.life )

            if ( this.prev == 0 ) then
                call TimerStart( thistype.period, 0.10, true, function thistype.iterate )
            endif
        endmethod


        public static constant method conditions takes nothing returns boolean
            return IsUnitType( GetDyingUnit( ), UNIT_TYPE_HERO )
        endmethod


    endstruct


    public function Initialization takes nothing returns nothing
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 1 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 2 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 3 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 4 ), EVENT_PLAYER_UNIT_DEATH, null )

        call TriggerAddCondition( herorevive.trig, Condition( function herorevive.conditions ) )
        call TriggerAddAction( herorevive.trig, function herorevive.actions )
    endfunction


endscope
Вот только если спрятать кнопку через HideAbilityButton( ), то способность ремонта зданий исчезает и не работает через ПКМ.

0
24
5 лет назад
0
А откуда у тебя возьмется "юнит триггера", если событие на таймере? Иди читай статьи о том как работают триггеры.
0
15
0
prog:
А откуда у тебя возьмется "юнит триггера", если событие на таймере? Иди читай статьи о том как работают триггеры.
А юнит триггера - (подземный рудокоп), разве не он? Или я действительно не правильно сделал...
4
26
5 лет назад
4
(Юнит триггера) относится к событию триггера. События на время ни к какому юниту не относятся, у них (Юнита триггера) быть не может.
Тебе нужно выбирать в группу всех своих Подземных рудокопов и в ней производить действия.
Если у (Выбранный юнит) здоровье меньше 36%, То дать способность, если нет, например, поднять уровень способности, Иначе опустить уровень способности.
0
15
0
8gabriel8:
Получается нужно сделать так:
У: (Тип юнита (Выбранный юнит)) равно Подземный рудокоп
Или же нужно через переменные?
2
4
5 лет назад
2
БезликийСектант, чтобы использовать выбранных юнитов, сначала их нужно выбрать, а у тебя этого нет.
Вот. Сделал наработку выбора. Замени пехотинца на рудокопа и Безумие на твою способность.
Загруженные файлы
Принятый ответ
3
15
3
8gabriel8:
Black Soul:
Спасибо вам за помощь!
0
4
5 лет назад
0
БезликийСектант, раз вопрос решен, то, пожалуйста, закрой его.
2
7
5 лет назад
Отредактирован Mate
2
Black Soul:
БезликийСектант, раз вопрос решен, то, пожалуйста, закрой его.
Он еще просил убрать способность. Чтобы убрать, нужно добавить условие в иначе где здоровье выше и убрать эту же способность.
0
15
5 лет назад
Отредактирован БезликийСектант
0
Mate:
Black Soul:
БезликийСектант, раз вопрос решен, то, пожалуйста, закрой его.
Он еще просил убрать способность. Чтобы убрать, нужно добавить условие в иначе где здоровье выше и убрать эту же способность.
Я понял, спасибо!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.