Библиотека, позволяющая отменять входящий урон.
Установка
- Скачать .j файл и переместить в Директория-JNGP/jass.
- В коде карты прописать импорт библиотеки.
//! import "NegateDamageLibrary.j"
- Создать способность (далее NegateDamageAbil), которая увеличивает максимальное здоровье юнитов. Рекомендуется создать способность на основе Item Life Bonus [AIlf] с увеличением здоровья на 1 миллион или больше.
- Указать равкод способности и значение увеличения здоровья в константах по шаблону ниже.
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, которая даёт ему щиты. Щиты поглощают весь входящий урон, пока не израсходуются.
У пехотинца есть способность 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
Исправлены критические ошибки.

WC3




Ред. PT153
Ред. Daro
Ред. PT153
Прокрутить к ресурсу
Прокрутить к ресурсу