Я написал такую систематизацию динамических триггеров:
function ctrg_createtrg takes unit u_src, integer ev_type returns integer
    set udg_cus_trg_im=udg_cus_trg_im+1
    set udg_cus_trg_cu[udg_cus_trg_im]=u_src
    set udg_Player_trig[udg_cus_trg_im]=CreateTrigger()
    if ev_type==1 then
        call TriggerRegisterUnitEvent( udg_Player_trig[udg_cus_trg_im], u_src, EVENT_UNIT_DAMAGED )
    elseif ev_type==2 then
        call TriggerRegisterUnitEvent( udg_Player_trig[udg_cus_trg_im], u_src, EVENT_UNIT_TARGET_IN_RANGE )
    endif
    set u_src=null
    return udg_cus_trg_im
endfunction

function ctrg_isuhasowntrg takes unit who returns boolean
    local integer i=21
    loop
        exitwhen i>udg_cus_trg_im or who==udg_cus_trg_cu[i]
        set i=i+1
    endloop
    set who=null
    if i>udg_cus_trg_im then
        return false
    endif
    return true
endfunction

function ctrg_readytodead takes trigger itready returns nothing
    local integer i=21
    loop
        exitwhen i>udg_cus_trg_im or itready==udg_Player_trig[i]
        set i=i+1
    endloop
    if i<=udg_cus_trg_im then
        set udg_cus_trg_cu[i]=null
    endif
    set itready=null
endfunction

function ctrg_masscheck takes nothing returns nothing
    if udg_cus_trg_cu[udg_cus_trg_ic]==null then
        call DestroyTrigger(udg_Player_trig[udg_cus_trg_ic])
        if udg_cus_trg_ic!=udg_cus_trg_im then
            set udg_Player_trig[udg_cus_trg_ic]=udg_Player_trig[udg_cus_trg_im]
            set udg_cus_trg_cu[udg_cus_trg_ic]=udg_cus_trg_cu[udg_cus_trg_im]
            set udg_cus_trg_ic=udg_cus_trg_ic-1
        endif
        set udg_Player_trig[udg_cus_trg_im]=null
        set udg_cus_trg_cu[udg_cus_trg_im]=null
        set udg_cus_trg_im=udg_cus_trg_im-1
    endif
endfunction

function Trig_CustomTriggers_Utility_Conditions takes nothing returns boolean
    return udg_cus_trg_im>20
endfunction

function Trig_CustomTriggers_Utility_Actions takes nothing returns nothing
    set udg_cus_trg_ic=21
    loop
        call ctrg_masscheck()
        set udg_cus_trg_ic=udg_cus_trg_ic+1
        exitwhen udg_cus_trg_ic>udg_cus_trg_im
    endloop
endfunction

//===========================================================================
function InitTrig_CustomTriggers_Utility takes nothing returns nothing
    set gg_trg_CustomTriggers_Utility = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_CustomTriggers_Utility, udg_cus_trg_timer )
    call TriggerAddCondition( gg_trg_CustomTriggers_Utility, Condition( function Trig_CustomTriggers_Utility_Conditions ) )
    call TriggerAddAction( gg_trg_CustomTriggers_Utility, function Trig_CustomTriggers_Utility_Actions )
endfunction
Будут ли тут оставаться утечки, касательно созданных триггеров?
P.S. первые 20 элементов массива зарезервированы на триггеры, которые нужны на протяжении всей игры.

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

Kind Ram, еще внезапно есть - это
Там изи детект всех видов урона и есть даже пример как это сделать....

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
6
7 лет назад
Отредактирован Kind Ram
0
quq_CCCP:
Kind Ram, еще внезапно есть - это
Там изи детект всех видов урона и есть даже пример как это сделать....
Эта штука не совсем то, что я имею ввиду, но всё равно спасибо, пригодится чтобы сделать сопротивление холоду/огню и прочие.
nvc123:
Kind Ram, а нафига сотни ифов?
смотри уже готовые системы отлова урона которых 100500
они все на 1 триггере
Ни одна система урона не будет учитывать 100500 уникальных баффов/абилок без 100500 if-фов. Ну если твой компьютер не обладает нейросетью, которая сама в реальном времени программирует тебе исходный код. Что в реалиях 3-го вара далеко не очень выполнимо.
0
23
7 лет назад
0
Так делай бд а там уже модификатор править после чего отдаеш результат.
0
32
7 лет назад
0
Kind Ram, ну а в чем проблема, система удаления триггеров - выложена в теме с веномансером, про действия и условия опсисано все там же.
0
29
7 лет назад
0
Kind Ram,
Вариант с одним триггером самый лучший, я уже объяснил почему, какие ещё проблемы?
0
28
7 лет назад
0
Ни одна система урона не будет учитывать 100500 уникальных баффов/абилок без 100500 if-фов.
любая нормальная система учитывает 100500 уникальных значения без 100500 if-фов.
просто бегая по бд и толкая нужные строки
либо используя абстрактные методы
2
33
7 лет назад
Отредактирован Кет
2
Ни одна система урона не будет учитывать 100500 уникальных баффов/абилок без 100500 if-фов.
любая нормальная система учитывает 100500 уникальных значения без 100500 if-фов.
просто бегая по бд и толкая нужные строки
«Если гвоздь плохо забивается, посмотри — может быть, это шуруп.»
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.