XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Strayiker
Warcraft Forever
offline
Опыт: 3,406
Активность:
Помогите определить рект
У меня в карте есть несколько ректов, например [1, 2, 3, 4]
Мне нужно, чтобы когда юнит заходил в однин из ректов, в нём (в этом ректе) происходило действие.
Т.к. функции GetTriggeringRect нету, к сожалению, я сделал так:

1) Сделал свою функцию события:

Код:
function H2I takes handle h returns integer
    return h
    return 0
endfunction

function I2RT takes integer i returns rect
    return i
    return null
endfunction

function SetObjPar takes handle h, string key, integer val returns nothing
    call StoreInteger(udg_Cache, I2S(H2I(h)), key, val)
endfunction

function GetObjRect takes handle h, string key returns rect
    return I2RT(GetStoredInteger(udg_Cache, I2S(H2I(h)), key))
endfunction

function TriggerRegisterEnterRect takes trigger trig, rect r returns event
    local region reg = CreateRegion()
    call RegionAddRect(reg, r)
    call SetObjPar(reg, "rect", H2I(r))
    return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction


это сдандартная функция события ректа, только создаваемому региону в параметр "rect" записывается рект который в него добавляется

2) И тригггер:
Код:
function Trig_Enter_Actions takes nothing returns nothing
    local rect rct = GetObjRect(GetTriggeringRegion(), "rect")
    call CreateNUnitsAtLoc( 1, 'hfoo', Player(0), GetRectCenter(rct), bj_UNIT_FACING )
endfunction

//===========================================================================
function InitTrig_Enter takes nothing returns nothing
    set gg_trg_Enter = CreateTrigger(  )
    call TriggerRegisterEnterRect( gg_trg_Enter, gg_rct_1 )
    call TriggerRegisterEnterRect( gg_trg_Enter, gg_rct_2 )
    call TriggerRegisterEnterRect( gg_trg_Enter, gg_rct_3 )
    call TriggerRegisterEnterRect( gg_trg_Enter, gg_rct_4 )
    call TriggerAddAction( gg_trg_Enter, function Trig_Enter_Actions )
endfunction


Помоему всё правильно, только GetObjRect(GetTriggeringRegion(), "rect") возвращает фигу с маслом.

Может я что не так сделал, мож ещё чё.
Есть ли способ определить в какой рект зашел юнит без перебора массива ?

Strayiker добавил:
Небольшая поправка:

function TriggerRegisterEnterRect takes trigger trig, rect r returns event
local region reg = CreateRegion()
call RegionAddRect(reg, r)
call SetObjPar(reg, "rect", H2I(r))
return TriggerRegisterEnterRegion(trig, reg, null)
endfunction
Старый 12.07.2008, 03:36
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:38.