[quote=Elf_Stratigo]сейчас тоже нужно для каждого обработчика вызывать
nothing AnyUnitDamagedEvent(trigger trg)
сравнил одну строку с созданием триггера, добавлением ему эвентов и действий добавления события другому триггеру
[quote=ScorpioT1000]есть всегда, говорю же ) проверьте в цикле - создайте и удалите тысячу триггеров, замерив в диспетчере задач количество памяти, занимаемой варом
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
Регистрация события идёт следующим образом:
все существующие юниты на карте добавляются в группу и на каждого нужному триггеру добавляется событие получения урона.
указанному триггеру регистрируется событие "юнит входит на игровую территорию".
при реакции на добавленное событие для юнита сразу добавляется событие получения урона.
Есть одна проблема, которую мне решать лень и я просто не знаю, как её решить в самой системе: при создании нового юнита сработает каждый триггер с событием на урон.
Лечится введением условия.
function TrigFunc takes someone returns somemore
if GetEnteringUnit() == null then
//действия при получении урона
endif
endfunction
Событие добавляется так:
call AnyUnitDamagedEvent(SomeTrigger)
Никаких дополнительных переменных вводить не нужно, достаточно просто скопировать в Нестандартный Код Карты
» WarCraft 3 / Библиотека функций
сравнил одну строку с созданием триггера, добавлением ему эвентов и действий добавления события другому триггеру
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
Doc: зачем?
то есть я знаю зачем, но не считаю это нужным
и вообще лучше по делу отпиши, как системка тебе и как можно ложное срабатывание убрать?
» Crysis 2 / Crysis 2: патч 1.8
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Редактирование приказов
в интерфейсе
» WarCraft 3 / Редактирование приказов
» WarCraft 3 / Радар
» WarCraft 3 / DotA 6.74c
Только кул версу надыбал...
» Half-Life / Portal 2. Уже в продаже!
» Crysis 2 / Моддинг Crysis2, первые шаги.
» WarCraft 3 / Пак иконок "Кельтские руны"
» WarCraft 3 / Мурлочья вышка
шикарно =)
» Прочее / League of Legends набирает обороты
» WarCraft 3 / XGM community room
» Прочее / League of Legends набирает обороты
» WarCraft 3 / Крестьянин Штормвинда
ну офк там не я один фактором выступаю, но надеюсь, что сделаем до конца.