Добавлен
Скажите, если триггер отработал, напрмер создал 100 юнитов в разное время, больше действий в нем нет, то стоит ли его удалять или отключать, так как он тратит "память" игры или он уже отбрасывается?

Принятый ответ

ну в принципе нет не обязательно, но удалять можно, хуже не будет - но для того чтобы был какой то толк от этого еще нужно будет сохранить куда то triggerconditon и triggeraction чтобы потом их удалить. Раньше вроде был баг с удалением триггеров (щяс его пофиксили или нет не знаю) но вот писать DestroyTrigger( GetTriggeringTrigger) в самом триггере не лучшая идея, это приводило к каким то багам (сам не видел) но в доте своя система удаления триггеров где они хранятся в запруженными в структуре минуту после удаляются, думаю это не спроста.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
8 лет назад
0
ну в принципе нет не обязательно, но удалять можно, хуже не будет - но для того чтобы был какой то толк от этого еще нужно будет сохранить куда то triggerconditon и triggeraction чтобы потом их удалить. Раньше вроде был баг с удалением триггеров (щяс его пофиксили или нет не знаю) но вот писать DestroyTrigger( GetTriggeringTrigger) в самом триггере не лучшая идея, это приводило к каким то багам (сам не видел) но в доте своя система удаления триггеров где они хранятся в запруженными в структуре минуту после удаляются, думаю это не спроста.
Принятый ответ
0
20
8 лет назад
0
quq_CCCP, ок лучше просто отключу
0
32
8 лет назад
Отредактирован quq_CCCP
0
Кстати если кому интересно вот утилизатор триггеров фрога:
globals
    timer DispTimer = null
    integer nTriggerIndex = 0
    trigger array DispTriggers
    real array Elapsed
	gg_trg_Trigger_Remover 
endglobals

function ClenTrigger_ERROR takes nothing returns nothing
    local integer nPlayerIndex = 0
    if udg_ItsForDebug then
        loop
            call DisplayTimedTextToPlayer( Player( nPlayerIndex ), 0, 0, 120, "|c00ff0303Что то пошло нетак!|r" )
            call DisplayTimedTextToPlayer( Player( nPlayerIndex ), 0, 0, 120, "|c00ff0303Это все фигня, ни какайте в трусы, этот баг несерьезен!|r" )
            call DisplayTimedTextToPlayer( Player( nPlayerIndex ), 0, 0, 120, "|c00ff0303Не забудьте сохранить реплей, а так же не поленитесь отправить его мне на мыло IceFrog@gmail.com|r" )
            set nPlayerIndex = nPlayerIndex + 1
            exitwhen nPlayerIndex == 12
        endloop
    endif
endfunction

function CleanTrigger_GetTime takes nothing returns real // зачем он обьявил эту функцию?
    return TimerGetElapsed( DispTimer )                  // так как она не где не используется оптимизатор не стер её оригинальное имя
endfunction

function DisposeTrigger takes trigger t returns nothing
    call DisableTrigger( t )
    set nTriggerIndex = nTriggerIndex + 1
    set DispTriggers[nTriggerIndex] = t
    set Elapsed[nTriggerIndex] = TimerGetElapsed( DispTimer ) + 60
    if nTriggerIndex > 8000 then
        call ClenTrigger_ERROR( )
    endif
endfunction

function CleanTriggerArray takes integer nIndex returns nothing
    if nIndex != nTriggerIndex then
        set DispTriggers[nIndex] = DispTriggers[nTriggerIndex]
        set Elapsed[nIndex] = Elapsed[nTriggerIndex]
    endif
    set DispTriggers[nTriggerIndex] = null
    set Elapsed[nTriggerIndex] = 0
    set nTriggerIndex = nTriggerIndex - 1
endfunction

function Trig_Trigger_Remover_Actions takes nothing returns nothing
    local real CleanTime = TimerGetElapsed( DispTimer )
    local integer nIndex = 1

    loop
        exitwhen nIndex > nTriggerIndex
        if Elapsed[nIndex] < CleanTime then
            if DispTriggers[nIndex] == null or IsTriggerEnabled( DispTriggers[nIndex] ) == true then
                call ClenTrigger_ERROR( )
            else
                call DestroyTrigger( DispTriggers[nIndex] )
            endif
            call CleanTriggerArray( nIndex )
            call BJDebugMsg("Триггер Удален!")
        else
            set nIndex = nIndex + 1
        endif
    endloop
  
    return
endfunction

//===========================================================================
function InitTrig_Trigger_Remover takes nothing returns nothing
    set gg_trg_Trigger_Remover = CreateTrigger( )
    set DispTimer = CreateTimer( )
    call TimerStart( DispTimer, 999999999999.00, false, null )
    call TriggerRegisterTimerEvent( gg_trg_Trigger_Remover, 15.00, true )
    call TriggerAddAction( gg_trg_Trigger_Remover, function Trig_Trigger_Remover_Actions )
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.