Что я делаю не так? Мне нужно использовать массив регионов.
Юнит входит в область ---> дальшей действия. Но что то не работает:
function EnterUnit_Actions takes nothing returns nothing
    call BJDebugMsg("Welcome!")
endfunction

function InitTrig_EnterUnit takes nothing returns nothing
    local integer i = 0
    
    set gg_trg_EnterUnit = CreateTrigger()
    
    loop
        set i = i + 1
        exitwhen i > 3
        set REGION[i] = CreateRegion()
        call RegionAddRect(REGION[i], RCT[i])
        call TriggerRegisterEnterRegion(gg_trg_EnterUnit, REGION[i], null)
    endloop
    
    call TriggerAddAction(gg_trg_EnterUnit, function EnterUnit_Actions)
endfunction

В общем странно. Если событие "юнит входит в регион", а этот регион сохранен в массиве - то такое событие придется инициализировать не при инициализации карты, а в другом месте. Например в действиях триггера или же через 0 секунд например.
Вот пример:
globals
    rect array RCT
    region array REGION
    trigger TRG = null
endglobals

function ZeroSec_Actions2 takes nothing returns nothing
    call BJDebugMsg("Welcome!")
endfunction

function ZeroSec_Actions takes nothing returns nothing
    local integer i = 0

    loop
        set i = i + 1
        exitwhen i > 3
        set REGION[i] = CreateRegion()
        call RegionAddRect(REGION[i], RCT[i])
    endloop

    set TRG = CreateTrigger()
    
    call TriggerRegisterEnterRegion(TRG, REGION[1], null)
    call TriggerRegisterEnterRegion(TRG, REGION[2], null)
    call TriggerRegisterEnterRegion(TRG, REGION[3], null)
    
    call TriggerAddAction(TRG, function ZeroSec_Actions2)
endfunction

function InitTrig_ZeroSec takes nothing returns nothing
    set RCT[1] = gg_rct_Zona1
    set RCT[2] = gg_rct_Zona2
    set RCT[3] = gg_rct_Zona3
    
    set gg_trg_ZeroSec = CreateTrigger()
    call TriggerRegisterTimerEventSingle(gg_trg_ZeroSec, 0.00)
    call TriggerAddAction(gg_trg_ZeroSec, function ZeroSec_Actions)
endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Если заменить модель дерева на модель травы, с анимамцией пригинания при смерти. Убрать колизию, то может получится.
Вот примерная наработка на деревьях.
ответ
XGM Bot:
Похожие вопросы:

ответ
GF RaiseD:
Я знаю только один способ избавления от утечек - писать код без них.Тебе нужен кто-то знающий игровые скрипты или злосчастный Jass. Иначе уровень неопределённости вопроса не позволит подсказать что-то дельное.

ответ
Никак. Регионы и области не сравниваются параметрически, то есть координатами, которые покрывают. Но можно узнать, находится ли точка в том или ином регионе. То есть, в твоем примере, проверить, находится ли юнит одновременно и в tempReg и в tempReg2.
ответ
quq_CCCP, выбор юнитов игрока позволяет выбрать москитов

и почему у тебя это событие не сработало тоже интересно, у меня всё ок с этим

у меня оба варианта работают
прикладываю так же карту

9
Что я делаю не так?
Ты не так задаешь вопросы. Я не понял чо те надо
28
На момент вызова InitTrig_EnterUnit массив RCT заполнен?

Ну и в целом раз триггер один, то можно все ректы в один регион добавить и один раз событие зарегистрировать.
4
В общем странно. Если событие "юнит входит в регион", а этот регион сохранен в массиве - то такое событие придется инициализировать не при инициализации карты, а в другом месте. Например в действиях триггера или же через 0 секунд например.
Вот пример:
globals
    rect array RCT
    region array REGION
    trigger TRG = null
endglobals

function ZeroSec_Actions2 takes nothing returns nothing
    call BJDebugMsg("Welcome!")
endfunction

function ZeroSec_Actions takes nothing returns nothing
    local integer i = 0

    loop
        set i = i + 1
        exitwhen i > 3
        set REGION[i] = CreateRegion()
        call RegionAddRect(REGION[i], RCT[i])
    endloop

    set TRG = CreateTrigger()
    
    call TriggerRegisterEnterRegion(TRG, REGION[1], null)
    call TriggerRegisterEnterRegion(TRG, REGION[2], null)
    call TriggerRegisterEnterRegion(TRG, REGION[3], null)
    
    call TriggerAddAction(TRG, function ZeroSec_Actions2)
endfunction

function InitTrig_ZeroSec takes nothing returns nothing
    set RCT[1] = gg_rct_Zona1
    set RCT[2] = gg_rct_Zona2
    set RCT[3] = gg_rct_Zona3
    
    set gg_trg_ZeroSec = CreateTrigger()
    call TriggerRegisterTimerEventSingle(gg_trg_ZeroSec, 0.00)
    call TriggerAddAction(gg_trg_ZeroSec, function ZeroSec_Actions)
endfunction
Загруженные файлы
Принятый ответ
Ответы (3)
28
Joma, так получается, что массив RCT не был заполнен, поэтому ничего и не работало. Надо было в InitTrig_EnterUnit просто заполнить массив и всё.
И как я уже сказал, можно создать всего один регион, а не три. Можно даже сначала событие зарегать, а уже потом в регион ректы добавить.
4
PT153, ах да, на первом примере не весь код. Там есть еще один триггер где массив ректов заполнен в общем то
28
Joma, так значит у тебя заполнение происходит во время инициализации карты, которая происходит после инициализации всех триггеров, а массив используется как раз во время инициализации триггеров, то есть он не заполнен на момент использования.
4
Вот еще интересное наблюдение, но оно скорее не будет относиться к этому вопросу
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.