Привет всем, может кто помочь со такой способностью, которая отнимала бы у героя 50% от текущего запаса здоровья, и в течении 10 сек. восстанавливала бы их обратно.
Вкратце это способность героя Зул'джин из Heroes of the Storm.
Думал как это реализовать на гуи, в голову ничего не лезет, могу только отнять здоровье, не знаю как это же количество восстанавливать обратно.
Описание скилла из хотса:
"При использовании Зул'джин мгновенно теряет 50% текущего запаса здоровья и восполняет такой же объем здоровья в течение 10 сек."
Делаю на рефордже последней версии.
Буду благодарен за любую помощь.

Не обязательно. Карта.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
33
Засёк, код написан 100% с нуля за 4 минуты
do
    TimerStart(CreateTimer(), 0.11, false, function()
        InitSpell() -- инициализация, сюда, чтобы работало само по себе
    end)
end

function InitSpell()
    local SpellTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
    end
    TriggerAddAction(SpellTrigger, function()
        if GetSpellAbilityId() == FourCC('A00A') then --ID Способности
            local caster=GetTriggerUnit() -- юнит скастовавший абилку
            local currentHP=GetUnitState(caster,UNIT_STATE_LIFE) -- значение текущего хп
            local restoreHP=currentHP/10 -- значение хп что будем восстанвливать
            local sec=0 -- обратный отсчет
            SetUnitState(caster,UNIT_STATE_LIFE,currentHP/2) -- отнимаем половину хп при касте
            TimerStart(CreateTimer(), 1, true, function() -- кложур таймер
                sec=sec+1
                SetUnitState(caster,UNIT_STATE_LIFE,GetUnitState(caster,UNIT_STATE_LIFE)+restoreHP) -- лечим героя на 1/10 за каждый тик таймера
                if sec>10 then
                    DestroyTimer(GetExpiredTimer())
                end
            end)

        end
    end)
end
Да это Lua
Да муи
Да без утечек
Нет на Джасс не умею
3
Bergi_Bear:
Засёк, код написан 100% с нуля за 4 минуты
do
    TimerStart(CreateTimer(), 0.11, false, function()
        InitSpell() -- инициализация, сюда, чтобы работало само по себе
    end)
end

function InitSpell()
    local SpellTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
    end
    TriggerAddAction(SpellTrigger, function()
        if GetSpellAbilityId() == FourCC('A00A') then --ID Способности
            local caster=GetTriggerUnit() -- юнит скастовавший абилку
            local currentHP=GetUnitState(caster,UNIT_STATE_LIFE) -- значение текущего хп
            local restoreHP=currentHP/10 -- значение хп что будем восстанвливать
            local sec=0 -- обратный отсчет
            SetUnitState(caster,UNIT_STATE_LIFE,currentHP/2) -- отнимаем половину хп при касте
            TimerStart(CreateTimer(), 1, true, function() -- кложур таймер
                sec=sec+1
                SetUnitState(caster,UNIT_STATE_LIFE,GetUnitState(caster,UNIT_STATE_LIFE)+restoreHP) -- лечим героя на 1/10 за каждый тик таймера
                if sec>10 then
                    DestroyTimer(GetExpiredTimer())
                end
            end)

        end
    end)
end
Да это Lua
Да муи
Да без утечек
Нет на Джасс не умею
Здорово конечно, но у меня в настройках карты стоит Jass.
Смогу я как-то это "вставать" в карту?
33
Нет не проверял
Нет, про паузу таймера не забыл

Здорово конечно, но у меня в настройках карты стоит Jass.
Смогу я как-то это "вставать" в карту?
Нет, но вы же не указали что джасс, ждите ответа на джасс или пользуйтесь моим способом как общности принципами, но на джасс сложнее.. потребуется хештаблицы или структуры
3
Bergi_Bear:
Нет не проверял
Нет, про паузу таймера не забыл

Здорово конечно, но у меня в настройках карты стоит Jass.
Смогу я как-то это "вставать" в карту?
Нет, но вы же не указали что джасс, ждите ответа на джасс или пользуйтесь моим способом как общности принципами, но на джасс сложнее.. потребуется хештаблицы или структуры
Я указал что делаю на гуи.
В любом случае спасибо за этот способ. Сохраню на всякий случай.
3
Bergi_Bear:
Нет не проверял
Нет, про паузу таймера не забыл

Здорово конечно, но у меня в настройках карты стоит Jass.
Смогу я как-то это "вставать" в карту?
Нет, но вы же не указали что джасс, ждите ответа на джасс или пользуйтесь моим способом как общности принципами, но на джасс сложнее.. потребуется хештаблицы или структуры
Будь такой же крутой и помоги мне с моим вопросом:) а то я голову уже сломал можно на луи
3
Bergi_Bear:
Гуи и луа полностью совместимы
Я в этом не особо разбираюсь, просто карта у меня уже старая, в плане еще до рефорджа делалась, и там в настройках невозможно поменять язык кода с джаз на луа.
30
и там в настройках невозможно поменять язык кода с джаз на луа.
Если удалить весь custom code то можно.

но на джасс сложнее.. потребуется хештаблицы или структуры
Тут человек в gui не может, а ты такие умные слова говоришь))
3
Тут человек в gui не может, а ты такие умные слова говоришь))
По факту.
NazarPunk:
Если удалить весь custom code то можно.
Боюсь это невозможно, слишком много триггеров.
30
Боюсь это невозможно, слишком много триггеров.
Мой внутренний экстрасенс говорит, что если переписать на lua, то их станет в разы меньше.
24
Я уже не помню есть ли пассивка с регеном не в %, а в абсолютных значениях. Если есть - появляется вариант как сделать дешево и сердито. Делаем кастомную абилку, триггером выдаем её юниту и нативкой для манипуляции с полями абилок меняем кол-во регена на рассчитаное исходя из кол-ва отнятого здоровья и длительности эффекта, ждем время длительности эффекта, удаляем абилку.
Более сложный, но более красивый вариант - то-же самое, но через даммика и абилку типа зелья омоложения. Минус - нужен даммик. Плюс - наличие визуальной индикации эффекта и не нужен таймер.
При условии, что нужные поля доступны для изменения, естественно.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.