Добавлен , опубликован
Предназначение:
Способ реализации:
Версия Warcraft:
Библиотека, позволяющая отменять входящий урон.

Установка

  1. Скачать .j файл и переместить в Директория-JNGP/jass.
  2. В коде карты прописать импорт библиотеки.
//! import "NegateDamageLibrary.j"
  1. Создать способность (далее NegateDamageAbil), которая увеличивает максимальное здоровье юнитов. Рекомендуется создать способность на основе Item Life Bonus [AIlf] с увеличением здоровья на 1 миллион или больше.
  2. Указать равкод способности и значение увеличения здоровья в константах по шаблону ниже.
globals
    constant integer NegateDamageLib_MaxLifeBonusAbility = 'A000'
    constant integer NegateDamageLib_MaxLifeBonus = 1000000
endglobals

Использование

NegateDamage
call NegateDamage(damaged_unit, damage_to_negate)
Отменяет damage_to_negate для damaged_unit. damage_to_negate должно быть больше 0. Если это значение больше входящего урона, то юнит будет вылечен на разницу этих значений. Если вызывать функцию не в триггере получения урона, то damaged_unit будет вылечен на damage_to_negate.
Отмена может не произойти в следующих случаях:
  • Входящий урон больше, чем бонус здоровья способности NegateDamageAbil.
  • У юнита здоровья меньше чем 1.
GetUnitMaxLife
set max_life = GetUnitMaxLife(any_unit)
Возвращает максимальное здоровье any_unit без учёта бонуса от NegateDamageAbil.

Особенности

Функция NegateDamage меняет текущее и максимальное здоровье юнита во время вызова и через некоторое время ещё раз:
  • Триггеры с событием Unit - Life (TriggerRegisterUnitLifeEvent) могут срабатывать во время изменений здоровья.
  • Чтобы узнавать максимальное здоровье без учёта изменений от NegateDamage, используйте функцию GetUnitMaxLife.

Примеры

Имунные рабочие

Карта
Рабочие игнорируют любой урон до миллиона включительно. Урон более миллиона может убить, а может и не убить.

Щит

Карта
У пехотинца есть способность Shield, которая даёт ему щиты. Щиты поглощают весь входящий урон, пока не израсходуются.

Обновления

08.12.2024
  • Настраиваемые константы (MaxLifeBonusAbility и MaxLifeBonus) теперь можно определить вне библиотеки.
    • Это позволяет импортировать библиотеку из файла, а не копировать её в код карты.
    • В связи с этим изменён способ установки и настройки.
  • Тестовые карты были обновлены для соответствия изменениям выше.
01.12.2024
  • Таймер запускается, только если способность NegateDamageAbil была добавлена.
  • Тестовые карты были обновлены для соответствия изменениям выше.
  • В карте NegateDamage-shield занулены поля Art - Animation - Cast Backswing и Art - Animation - Cast Point у пехотинца.
27.01.2022
  • Теперь способность добавляется в случаях, если сумма текущего здоровья и отменяемого урона больше максимального запаса здоровья.
  • GetUnitMaxHealth переименована в GetUnitMaxLife.
  • Тестовые карты были обновлены для соответствия изменениям выше.
25.12.2021
  • Убрано требование "библиотеки" AINativesLib, так как тот ресурс был обновлён.
  • Определение UnitAlive было добавлено в код самой библиотеки.
  • Обновлены тестовые карты дабы соответствовать изменениям выше.
23.03.2021
  • Добавлена функция GetUnitMaxHealth.
  • Некоторые константы стали публичными.
  • Добавлена ещё одна карта-пример.
21.03.2021 - 3
Полная переработка библиотеки:
  • Делает всё тоже самое, но лучше. Например, теперь регенерация здоровья верно работают у юнитов, которые игнорируют весь входящий урон и находятся под непрерывным огнём.
  • Убрана целая куча настроек и требований.
21.03.2021 - 2
  • В требования добавлена AI natives library.
  • Изменена проверка того, что юнит жив.
21.03.2021 - 1
  • Обновлён способ отключения других триггеров, отслеживающих урон.
  • Обновлена карта-пример.
  • Улучшена обработка случая, когда юнит умирает от полученного урона.
16.03.2021
Исправлены критические ошибки.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Vlod, потому что это короче, говорят, что ещё и быстрее, а суть та же, что и у UnitState для жизни.
15
Нипанаятна.
С одной стороны, юниту необходимо установить его текущее здоровье в момент выдачи способности с дополнительным хп, поскольку, при увеличении максимального запаса здоровья, процент текущего запаса здоровья сохраняется, что изменяет его численное количество (или нет?).
С другой стороны, отхиливать юнита нужно в момент нанесения урона. Если делать это в таймере с нулевой задержкой, то в момент исполнения кода таймера юнит уже может быть мертв от того самого урона, от которого его полагалось отлечить.
8
С другой стороны, отхиливать юнита нужно в момент нанесения урона. Если делать это в таймере с нулевой задержкой, то в момент исполнения кода таймера юнит уже может быть мертв от того самого урона, от которого его полагалось отлечить.
Поэтому абилка с хп и добавляется. Всегда так делали на старых патчах
15
Поэтому абилка с хп и добавляется
Речь не про абилку а про отхил. Про то что отхиливать нужно в момент получения урона.
28
GetLocalPlayer, когда срабатывает событие, никакого урона нет. Он будет нанесён, когда триггер завершится. Если в триггере есть пауза, то когда она начнёт выполняться.

А, я понял, о чём речь.

Пока снял с публикации.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.