Какой функцией можно удалить trigger event с какого-либо триггера?

Никакой, события удаляются - от слова никак!
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Никакой, события удаляются - от слова никак!
Принятый ответ
Этот комментарий удален
21
quq_CCCP, ты отвечал в моём предыдущем вопросе (про библиотеку, которая добавляет событие на получение урона всем юнитам), там добавляется событие на каждого юнита на карте. Так как карта у меня жанра TD, получается, что карта будет иметь миллион утечек памяти?
26
карта будет иметь миллион утечек памяти?
А почему вы решили, что события вызывают утечки?
21
Uber, а что нет? ну не совсем утечки, но ненужный объект все равно же остаётся в памяти.
21
Uber, :-) я не знаю, поэтому тут и спросил (развёрнутого ответа).
32
События висят в памяти пока существует обьект на который повешено это событие, в вашем случаи это юнит, если его удалить то не будет и события, триггер тоже можно удалить с кондишинами и экшинами. В тд вовсе ненужна никакая систетема, просто триггер на каждую волну куда и записывается все события на каждого юнита в волне, после окончания все это удаляется.
21
quq_CCCP, у меня скиллы у таверов работают, когда они атакуют противников.
32
ScopteRectuS:
quq_CCCP, у меня скиллы у таверов работают, когда они атакуют противников.
Совершенно не понимаю связь с триггерами на отслеживание урона?
Есть волны крипов, есть здания... Дальше что?
21
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
Как видишь, на каждого нового заспавненного крипа прикрепляется евент, который остаётся после смерти крипа.
А такой триггер мне нужен, чтобы правильно работали скиллы у таверов. Например, один товер, атакуя кастует огненный столб на атакованного и т.д.
32
Знаешь, а нафига тебе нужно отслеживать урон:? Есть событие любой игрок игрока N атакован, одно событие на игрока, на всю игру. Не забивает память.
21
quq_CCCP, потому что этот эвент срабатывает еще до того, как юнит получит урон, достаточно лишь замахнуться, чтобы запустить триггер. А в этой библиотеке, триггер запускается, когда цель получит урон.
32
ScopteRectuS, цель получает урон очень часто, как будем отличать урон от физ тычки от абилок башни?
Да и если ты бросаешь спелл, зачем тебе ждать удара?
21
у меня есть проверка, на наличие какой-либо абилки. спел кастует дамми юнит, товер продолжает атаковать
32
Просто создаешь триггер каждую волну, на каждого созданного тобой крипа вешаешь событие что он сдох, что получил урон. Усе.
Далее добавляешь кондищены и акшены, когда волна закончится и все мобы сдохли, удаляем всех крипов действием RemoveUnit, удаляем условия и действия у триггера, паузим триггер и удаляем через минутку-другую, а затем удаляем. Так не будет утечек и минимум нагрузки.
Я выкладывал код веномансера из доты, там прилеплена наработка грамотного удаления триггеров чтобы не было коллизии хендлов триггеров.
21
quq_CCCP, можно ссылочку на этот скиллНъ??
ps нашел
ps2: зачем при спавне крипов что то им добавлять, если та библиотека делает тоже самое?
32
У тебя код добавляет всех подряд, темболее нафиг тебе отдельный триггер и добавление всех юнитов на карте?
Событие юнит получает урон - нужно только крипам, когда ты их создаешь, добавляешь и событие на каждого созданного юнита, это быстрее и не требует отдельного триггера + не будет проблем с повторным событием и не будет юнитов которым эти события ненужны.
Ты же хотел чтобы без утечек и максимально быстро?
20
разве что отключением\удалением самого триггера
Чтобы оставить комментарий, пожалуйста, войдите на сайт.