Я написал такую систематизацию динамических триггеров:
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 элементов массива зарезервированы на триггеры, которые нужны на протяжении всей игры.
P.S. первые 20 элементов массива зарезервированы на триггеры, которые нужны на протяжении всей игры.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Kind Ram
nvc123:
Вариант с одним триггером самый лучший, я уже объяснил почему, какие ещё проблемы?
просто бегая по бд и толкая нужные строки
либо используя абстрактные методы
Отредактирован Кет