Добавлен scopterectus,
не публикуется
Написал библиотеку по отлавливанию получения повреждений.
- Всё ли правильно я сделал?
- Что можно доработать?
- Если добавленный юнит умрет, то event, который отвечает за получение им повреждений останется в памяти. Плохо ли это? Если да, то как его удалить правильно?
library TriggerRegisterAnyUnitDamagedEvent initializer Init
globals
public constant trigger TRIGGER = CreateTrigger()
private constant trigger TRIGGER_ADDER = CreateTrigger()
endglobals
private function TriggerAddEvent takes nothing returns boolean
if not HaveSavedHandle(HASHTABLE, GetHandleId(GetFilterUnit()), StringHash("bla_bla")) then
call SaveTriggerEventHandle(HASHTABLE, GetHandleId(GetFilterUnit()), StringHash("bla_bla"), TriggerRegisterUnitEvent(TRIGGER, GetFilterUnit(), EVENT_UNIT_DAMAGED))
endif
return false
endfunction
private function Init takes nothing returns nothing
local group g = CreateGroup()
local rect r = GetWorldBounds()
local region reg = CreateRegion()
local boolexpr filter = Condition(function TriggerAddEvent)
call GroupEnumUnitsInRect(g, r, filter)
call RegionAddRect(reg, r)
call TriggerRegisterEnterRegion(TRIGGER_ADDER, reg, filter)
call DestroyGroup(g)
call RemoveRect(r)
set g = null
set r = null
set reg = null
endfunction
function TriggerRegisterAnyUnitDamagedEvent takes code c returns nothing
call TriggerAddCondition(TRIGGER, Condition(c))
endfunction
endlibrary
UPD 1: Заметил такой баг - создавал кучу воинов и атаковал их, на некоторых воинов не срабатывал триггер, в то время как на других работал.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. scopterectus
Так же нету проверки на героев, они могут войти на карту дважды, помойму после смерти герой не покидает игровой рект, но на всякий случай проверь, чтобы не наплодить 100500 ивентов на одного юнита.
Ред. scopterectus