Добавлен , опубликован
Библиотека, которая позволяет добавлять общее событие "юнит получает урон":
cJass
library UnitDamaged initializer InitRect
{
    region Region
    nothing Adder()
    {
        if(GetEnteringUnit()!=null)
        {
            TriggerRegisterUnitEvent(GetTriggeringTrigger(),GetEnteringUnit(),EVENT_UNIT_DAMAGED)
        }
    }
    
    nothing AnyUnitDamagedEvent(trigger trg)
    {
        group CurrentUnits = CreateGroup()
        unit Picked
        GroupEnumUnitsInRect(CurrentUnits,bj_mapInitialPlayableArea,null)
        loop
        {
            Picked = FirstOfGroup(CurrentUnits)
            exitwhen Picked == null
            TriggerRegisterUnitEvent(trg,Picked,EVENT_UNIT_DAMAGED)
            GroupRemoveUnit(CurrentUnits,Picked)
        }
        TriggerRegisterEnterRegion(trg,Region,null)
        TriggerAddAction(trg,function Adder)
        DestroyGroup(CurrentUnits)
        CurrentUnits=null
    }
    
    nothing InitRect()
    {
        Region = CreateRegion()
        RegionAddRect(Region, bj_mapInitialPlayableArea)
    }
}
vJass
library UnitDamaged initializer InitRect
    globals
        region Region
    endglobals
    function Adder takes nothing returns nothing
        if GetEnteringUnit()!=null then
            call TriggerRegisterUnitEvent(GetTriggeringTrigger(),GetEnteringUnit(),EVENT_UNIT_DAMAGED)
        endif
    endfunction

    function AnyUnitDamagedEvent takes trigger trg returns nothing
        local group CurrentUnits = CreateGroup()
        local unit Picked
        call GroupEnumUnitsInRect(CurrentUnits,bj_mapInitialPlayableArea,null)
        loop
            set Picked = FirstOfGroup(CurrentUnits)
            exitwhen Picked == null
            call TriggerRegisterUnitEvent(trg,Picked,EVENT_UNIT_DAMAGED)
            call GroupRemoveUnit(CurrentUnits,Picked)
        endloop
        call TriggerRegisterEnterRegion(trg,Region,null)
        call TriggerAddAction(trg,function Adder)
        call DestroyGroup(CurrentUnits)
        set CurrentUnits=null
        set Picked=null
    endfunction

    function InitRect takes nothing returns nothing
        set Region = CreateRegion()
        call RegionAddRect(Region, bj_mapInitialPlayableArea)
    endfunction
endlibrary

Регистрация события идёт следующим образом:
  1. все существующие юниты на карте добавляются в группу и на каждого нужному триггеру добавляется событие получения урона.
  2. указанному триггеру регистрируется событие "юнит входит на игровую территорию".
  3. при реакции на добавленное событие для юнита сразу добавляется событие получения урона.

Есть одна проблема: при создании нового юнита сработает каждый триггер с событием на урон.
Лечится введением условия.
function TrigFunc takes someone returns somemore
if GetEnteringUnit() == null then
    //действия при получении урона
endif
endfunction

Событие добавляется так:
    call AnyUnitDamagedEvent(SomeTrigger)

Ссылки на сущности при использовании системы:
Источник урона (атаковавший юнит):
GetEventDamageSource()
Величина нанесённого урона:
GetEventDamage()
Цель урона (атакованный юнит):
GetTriggerUnit() 

Никаких дополнительных переменных вводить не нужно, достаточно просто скопировать в Нестандартный Код Карты.

Версия без проблемы с условием, но с дополнительным массивом триггеров (не использовать в динамических триггерах):
Код
library UnitDamaged initializer InitRect
{
    private region  Region
    private group   Group
    private int     TrigsNum = 0
    private trigger array Trigger
    
    private void Adder()
    {
        int i = 0
        loop
        {
            TriggerRegisterUnitEvent(Trigger[i],GetEnteringUnit(),EVENT_UNIT_DAMAGED)
            exitwhen i==TrigsNum
            i++
        }
        GroupAddUnit(Group,GetEnteringUnit())
    }
    
    private void Registrator()
    {
        TriggerRegisterUnitEvent(Trigger[TrigsNum],GetEnumUnit(),EVENT_UNIT_DAMAGED)
    }
    
    void AnyUnitDamagedEvent(trigger trg)
    {
        Trigger[TrigsNum]=trg
        ForGroup(Group,function Registrator)
        TrigsNum++
    }

    private void InitRect()
    {
        trigger trg = CreateTrigger()
        Group = CreateGroup()
        Region = CreateRegion()
        GroupEnumUnitsInRect(Group,bj_mapInitialPlayableArea,null)
        RegionAddRect(Region, bj_mapInitialPlayableArea)
        TriggerRegisterEnterRegion(trg,Region,null)
        TriggerAddAction(trg,function Adder)
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...