Можно получить GetTriggeringRegion(), а нужно получить конкретно Rect в который вошли.

EugeAl, уже сделал систему подобную системе применению способностей которую скидывал rsfghd.
`
ОЖИДАНИЕ РЕКЛАМЫ...
9
Возможно, связав регион с прямоугольником.
Локалки сам обнуляй
globals
    region array regions
    rect array rects
    integer regionCount = 0
endglobals

function CreateRegionRect takes rect r returns region
    local region reg = CreateRegion()
    call RegionAddRect(reg, r)
    set regions[regionCount] = reg
    set rects[regionCount] = r
    set regionCount = regionCount + 1
    return reg
endfunction

function GetRectFromRegion takes region reg returns rect
    local integer i = 0
    loop
        exitwhen i >= regionCount
        if regions[i] == reg then
            return rects[i]
        endif
        set i = i + 1
    endloop
    return null
endfunction

function OnEnterRegion takes nothing returns nothing
    local region triggeringRegion = GetTriggeringRegion()
    local rect triggeringRect = GetRectFromRegion(triggeringRegion)
    local unit enteringUnit = GetTriggerUnit()

    // Теперь у тебя есть прямоугольник, в который вошел юнит
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Юнитыч вошёл в область ЫЫЫЫ: " + R2S(GetRectWidthBJ(triggeringRect)) + "x" + R2S(GetRectHeightBJ(triggeringRect)))
    
endfunction

function InitTrigSmetoGPT takes nothing returns nothing
    local trigger t = CreateTrigger()
    local rect r1 = Rect(0, 0, 512, 512)
    local rect r2 = Rect(512, 512, 1024, 1024)
    local region reg1 = CreateRegionRect(r1)
    local region reg2 = CreateRegionRect(r2)
    call TriggerRegisterEnterRegion(t, reg1, null)
    call TriggerRegisterEnterRegion(t, reg2, null)
    call TriggerAddAction(t, function OnEnterRegion)
endfunction
А если ручками не хочется Rectы делать, то динамическое создание триггеров в помощь
28
В регион можешь записать рект через хэштаблицу, если на каждый регион по одному ректу
Ответы (26)
11
rsfghd, я просто делаю систему ректов, что-бы на один триггер всё повесить.
28
LastUchiha, в один триггер можно кучу событий входа в регион пихнуть, к в каждый регион по ректу, рект сохранить в ключ региона, ты сможешь потом доставать из GetTriggeringRegion, я так делал чтобы юнитов по точкам водить
11
rsfghd, просто наспамить TriggerRegisterEnterRegion?
То есть помимо ректов мне ещё нужно например массив с регионами создать?
11
rsfghd, ну на карте у меня будет много ректов, я создал массив регионов... Вот системка.
RegionAddRect() - для всех регионов область будет добавляться в функции, которая будет вызываться в main, что-бы прогрузить всё на экране загрузки.
Загруженные файлы
28
LastUchiha, потому что твоя приблуда будет расти с каждой областью вместо того, чтобы выгрузить её из хэндлида региона триггера
11
rsfghd, можешь пример что-ли скинуть? Я честно не понимаю этого момента.
22
LastUchiha, в триггере где RegisterEnterRegion добавляешь функцию
call SaveRectHandle ( hashtable, GetHandleId(region), 1, rect )
Чтобы получить область, вызываешь функцию
call LoadRectHandle ( hashtable, GetHandleId(GetTriggeringRegion()), 1 )
И так с каждой областью, делаешь регион, сохраняешь область и загружаешь)
28
LastUchiha, выгрузи рект и сравнивай с существующими ректами. И вообще ты можешь нужные тебе действия выполнять без сравнения, сохранив другие необходимые данные в регион триггера, например строку на вызов функции
11
rsfghd, всё, дошло... А сохранять ректы в хэш таблицу по ключу региона где нибудь где в регионы ректы добавляются?
22
LastUchiha, да, сохранять в том месте, где создаётся region
Для проверки юнита/координат в region есть спец функции IsUnitInRegion и IsPointInRegion , они returns boolean
28
код
globals
    constant hashtable H = InitHashtable( )
endglobals

function Trig_Melee_Initialization_Actions takes nothing returns nothing
    local rect r = LoadRectHandle( H, GetHandleId( GetTriggeringRegion( ) ), 0 )
    
    if r != null then
        call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Other\\HowlOfTerror\\HowlCaster.mdl", GetRectCenterX( r ), GetRectCenterY( r ) ) )
        
        set r = null
    endif
endfunction

//===========================================================================
function InitTrig_Melee_Initialization takes nothing returns nothing
    local region rectRegion
    
    set gg_trg_Melee_Initialization = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )

    set rectRegion = CreateRegion( )
    call RegionAddRect( rectRegion, gg_rct_Rect_000 )
    call SaveRectHandle( H, GetHandleId( rectRegion ), 0, gg_rct_Rect_000 )
    call TriggerRegisterEnterRegion( gg_trg_Melee_Initialization, rectRegion, null )
    
    set rectRegion = CreateRegion( )
    call RegionAddRect( rectRegion, gg_rct_Rect_001 )
    call SaveRectHandle( H, GetHandleId( rectRegion ), 0, gg_rct_Rect_001 )
    call TriggerRegisterEnterRegion( gg_trg_Melee_Initialization, rectRegion, null )
    
    set rectRegion = CreateRegion( )
    call RegionAddRect( rectRegion, gg_rct_Rect_002 )
    call SaveRectHandle( H, GetHandleId( rectRegion ), 0, gg_rct_Rect_002 )
    call TriggerRegisterEnterRegion( gg_trg_Melee_Initialization, rectRegion, null )
    
    set rectRegion = null
endfunction

Загруженные файлы
11
rsfghd, ну тут в отличии от моего способа просто кол-во переменных регионов расти не будет.
Нужно так-же не 1 действие от нескольких областей, т.е. кол-во if-ов как не крути будет расти...
11
rsfghd, ну мне же нужно сравнить в какую именно область зашёл юнит правильно? У меня к примеру 16 областей только для сдачи квестов для разных персов. А ещё области для телепорта и т.д.
11
rsfghd, всмысле привязать квест к области? Под квестами я имею ввиду сдачу к примеру Мангекьо Шарингана (персу абилка добавляется, статы, и т.д., что-бы сдать он должен выбить предмет этот у нпц и зайти в свою область), ещё есть квесты где чар подменяется на его лучшую версию к примеру Саске --> Саске Мангекьо Шаринган.
28
LastUchiha, пздес, ну запиши целочисленную если тебе нужны ифы, я бы через экзекютфунк сделал
28
LastUchiha, да и вообще ответ на свой изначальный вопрос ты уже получил
22
LastUchiha, если у тебя квест завязан на вход в область, ну то есть регион с областью, можно также через хэш таблицу сохранить и загрузить квест, квест ведь тоже хэндл и для него есть SveQuestHandle LoadQuestHandle
Для условий задания questitem тоже есть такие функции
11
EugeAl, уже сделал систему подобную системе применению способностей которую скидывал rsfghd.
Принятый ответ
15
Какое-то дежавю. Разве недавно не было такого вопроса?
32
Ну ты же всегда можешь получить координаты юнита, просто проверить принадлежат ли они региону или нет.
Ответы (2)
11
quq_CCCP, причём тут это... Я просто пытаюсь события всех областей повесить на один триггер...
32
LastUchiha, перебор и проверка принадлежит ли xy хоть одной области...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.