Добавлен Faion,
не публикуется
Для подписки на данный эвент использовать:
TriggerRegisterAnyUnitTakesDamage(t)
Если нужно добавить тип юнитов, которые нужно игнорировать системой (к примеру юнитов для дгуи\фсгуи), используйте:
AddFilterUnitByTypeId(typeId)
Для удаления:
RemoveFilterUnitByTypeId(typeId)
Если хотите что б событие нанесения нулевого урона не регистрировалось, установите в настройках:
#define private EventDamage = 0.0
TriggerRegisterAnyUnitTakesDamage(t)
Если нужно добавить тип юнитов, которые нужно игнорировать системой (к примеру юнитов для дгуи\фсгуи), используйте:
AddFilterUnitByTypeId(typeId)
Для удаления:
RemoveFilterUnitByTypeId(typeId)
Если хотите что б событие нанесения нулевого урона не регистрировалось, установите в настройках:
#define private EventDamage = 0.0
библиотека
library UnitDamageEvent
{
// источник урона
public unit Source = null;
// цель урона
public unit Target = null;
// урон
// для регистрации эвента нанесения урона установите значение как -1.0
// если вы хотите, что бы нулевой урон не вызывал эвент, то установите как 0.0
#define private EventDamage = -1.0;
public float Damage = EventDamage;
private trigger EventTrigger = null;
private trigger SystemTrigger = null;
// отвечает за включение\отключение фильтрации юнитов
#define private UnitFilterEnable = true;
#if (UnitFilterEnable)
public hashtable sysHashtable = InitHashtable();
#endif
// добавление\удаление типа юнита для фильтрации
#define AddFilterUnitByTypeId(typeId) = SaveBoolean(UnitDamageEvent_sysHashtable, 0,typeId, true)
#define RemoveFilterUnitByTypeId(typeId) = RemoveSavedBoolean(UnitDamageEvent_sysHashtable, 0,typeId)
#define TriggerRegisterAnyUnitTakesDamage(t) = TriggerRegisterVariableEvent(t, "UnitDamageEvent_Damage", GREATER_THAN, EventDamage);
callback onInit()
{
EventTrigger = CreateTrigger(); SystemTrigger = CreateTrigger();
group g = CreateGroup();region r = null;unit u = null;
GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null);
ForGroup(g, lambda void(){
#if(UnitFilterEnable)
if(LoadBoolean(UnitDamageEvent_sysHashtable, 0,GetUnitTypeId(GetEnumUnit()))){return;}
#endif
TriggerRegisterUnitEvent(EventTrigger,GetEnumUnit(),EVENT_UNIT_DAMAGED)
});
GroupClear(g);DestroyGroup(g);g = null;
RegionAddRect(r, bj_mapInitialPlayableArea);
TriggerRegisterEnterRegion(SystemTrigger,r,null); r = null;
TriggerAddAction(SystemTrigger, lambda void(){
#if(UnitFilterEnable)
if(LoadBoolean(UnitDamageEvent_sysHashtable, 0,GetUnitTypeId(GetEnumUnit()))){return;}
#endif
TriggerRegisterUnitEvent(EventTrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
});
TriggerAddAction(EventTrigger, lambda void()
{
Source = GetEventDamageSource();Target = GetTriggerUnit();Damage = GetEventDamage();
Source = null;Target = null;Damage = EventDamage
});
}
}
Для работы библиотеки требуется последняя версия cjass
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован SlenderMan
Отредактирован Faion
Отредактирован Faion