Code
library ZONES initializer ZONE_INIT requires UTILS
private function ZONE_ACTIONS takes nothing returns nothing
local region from = GetTriggeringRegion()
local integer k = -1
local integer i = 0
call BJDebugMsg("3/5")
loop
if(zone_rects[i] == from) then
set k = i
endif
set i = i+1
exitwhen (i == zone_num)
endloop
call BJDebugMsg("4/5")
if not(k == -1) then
call BJDebugMsg("5/5")
call SetUnitPosition(GetEnteringUnit(),GetRectCenterX(zone_dest[k]),GetRectCenterY(zone_dest[k]))
endif
endfunction
function MoveOnEnter takes rect whichZone, rect toWhichZone returns nothing
local trigger ZONE_TRIGGER = CreateTrigger()
call BJDebugMsg("1/5")
set zone_num = zone_num+1
set zone_rects[zone_num-1] = whichZone
set zone_dest[zone_num-1] = toWhichZone
call RegisterRegionEvent(ZONE_TRIGGER,whichZone)
call BJDebugMsg("2/5")
call TriggerAddAction(ZONE_TRIGGER,function ZONE_ACTIONS)
set ZONE_TRIGGER = null
endfunction
private function ZONE_INIT takes nothing returns nothing
/*local trigger ZONE_TRIGGER = CreateTrigger()
call RegisterRegionEvent(ZONE_TRIGGER,gg_rct_zone1)
call TriggerAddAction(ZONE_TRIGGER,function ZONE_ACTIONS)
set ZONE_TRIGGER = null*/
call MoveOnEnter(gg_rct_zone1,gg_rct_zone2)
endfunction
endlibrary
Извените за ватность кода, еще не оптимизировал... Суть в том что мы простой функцией создаем триггер с событием по входу в ту-то зону и портаемся в ту-то. Проблема в получении зоны, в которую мы вошли. Функция GetTriggeringRegion неожиданно возвращает region, что не есть rect, который используется в редакторе(большое спс умным близзам). Пробывал написать функцию преобразования rect в region, но всёравно сообщения 5/5 не поступало, тоесть это не подходит. А преобразовывал я единственным способом - функцией RegionAddRect. Как можно реализовать это? в XAT пока только разбираюсь да и не доверяю ему пока.Добавлено (18-07-2011, 20:39)
---------------------------------------------
Ах да, забыл:
Code
library UTILS
function RegisterAnyUnitEvent takes trigger whichTrigger, playerunitevent whichEvent returns nothing
local integer index = 0
loop
call TriggerRegisterPlayerUnitEvent(whichTrigger, Player(index), whichEvent, null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
endfunction
function RegisterRegionEvent takes trigger whichTrigger, rect whichZone returns nothing
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, whichZone)
call TriggerRegisterEnterRegion(whichTrigger, rectRegion, null)
set rectRegion = null
endfunction
endlibrary
//gg_rct_zone1 и gg_rct_zone2 - зоны созданные в WE
Добавлено (18-07-2011, 20:41)
---------------------------------------------
и еще:
Code
globals
rect array zone_rects
rect array zone_dest
integer zone_num = 0
endglobals
Кстати пробовал колдовать с handle вместо регионов и ректов, не вышло