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

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

Ответ
 
DARGO
На краю вселенной!
offline
Опыт: 5,352
Активность:
проблема с зонами
На карте существет около 100 областей. Как сделать, чтобы если юнит покидает одну из этих областей, его тпшит в центр покинутой
области? Я конечно знаю, что можно сделать отдельный триггер для каждой зоны, но можно ли все сделать коротко в 1-2триггера? Без джасса
Старый 18.09.2014, 14:48
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DARGO, можно вовсе в 1 триггере
на каждую зону событие что юнит эту зону покинул, в хештаблицу запиши при этом на ID ивента координаты центра зоны, и тепелпортируй юнитов хот за телепортируйся.
Старый 18.09.2014, 14:52
DARGO
На краю вселенной!
offline
Опыт: 5,352
Активность:
quq_CCCP, плиз подробнее про хеш, я с ними дело никогда не имел. Как отловить коры центра области?
Старый 18.09.2014, 14:58
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
вот код:
» пример кода jass only
((код jass
globals
integer KeyX = StringHash("RectX") ключ для координаты Х, вдург еще что надо будет сохранить на id ректа...
integer KeyY = StringHash("RectY") ключ для координаты Y, вдург еще что надо будет сохранить на id ректа...
endglobals
function Trig_NO_LEFT_AREA_Conditions takes nothing returns boolean
return not IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE)
endfunction
function Trig_NO_LEFT_AREA_Actions takes nothing returns nothing
local integer id = GetHandleId( GetTriggeringRegion() )
local real TX = LoadReal( bj_lastCreatedHashtable, id,KeyX)
local real TY = LoadReal( bj_lastCreatedHashtable, id,KeyY)
local unit Leaver = GetTriggerUnit()
call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", TX, TY ) )
call SetUnitX( Leaver, TX )
call SetUnitY( Leaver, TY )

set Leaver = null
endfunction
===========================================================================
function InitTrig_NO_LEFT_AREA takes nothing returns nothing
local region rectRegion
local integer id

set gg_trg_NO_LEFT_AREA = CreateTrigger( )
set bj_lastCreatedHashtable = InitHashtable()

set rectRegion = CreateRegion() создаём рект.
call RegionAddRect(rectRegion, gg_rct________________000) добовляем рект в область.
call TriggerRegisterLeaveRegion(gg_trg_NO_LEFT_AREA, rectRegion, null) создаём событие на данный рект.

set id = GetHandleId(rectRegion) берем id от ректа.
call SaveReal( bj_lastCreatedHashtable, id,KeyX, GetRectCenterX(gg_rct________________000) ) сохраняем координату Х, на id ректа.
call SaveReal( bj_lastCreatedHashtable, id,KeyY, GetRectCenterY(gg_rct________________000) ) сохраняем координату Y, на id ректа.

set rectRegion = CreateRegion()
call RegionAddRect(rectRegion, gg_rct________________001)
call TriggerRegisterLeaveRegion(gg_trg_NO_LEFT_AREA, rectRegion, null)

set id = GetHandleId(rectRegion)
call SaveReal( bj_lastCreatedHashtable, id,KeyX, GetRectCenterX(gg_rct________________001) )
call SaveReal( bj_lastCreatedHashtable, id,KeyY, GetRectCenterY(gg_rct________________001) )


call TriggerAddCondition( gg_trg_NO_LEFT_AREA, Condition( function Trig_NO_LEFT_AREA_Conditions ) )
call TriggerAddAction( gg_trg_NO_LEFT_AREA, function Trig_NO_LEFT_AREA_Actions )

set rectRegion = null
endfunction
))
Вот карта пример, JASS ONLY - варианта на GUI не прилагается.
Прикрепленные файлы
Тип файла: w3m escape.w3m (13.6 Кбайт, 3 просмотров )
Старый 18.09.2014, 15:33
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DARGO, Так и не разобрался?
вот проверь:
» !!JASS!!
((код jass
globals
integer KeyLoc = StringHash("LocXY") ключ для точки центра региона.
endglobals
function Trig_NO_LEFT_AREA_Conditions takes nothing returns boolean
return not IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE)
endfunction
function Trig_NO_LEFT_AREA_Actions takes nothing returns nothing
local location TempLoc = LoadLocationHandle( bj_lastCreatedHashtable, GetHandleId( GetTriggeringRegion() ), KeyLoc )
local unit Leaver = GetTriggerUnit()
call DestroyEffect( AddSpecialEffectLoc( "Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", TempLoc ) )
call SetUnitX( Leaver, GetLocationX( TempLoc ) )
call SetUnitY( Leaver, GetLocationY( TempLoc ) )

call SetUnitPositionLocBJ( Leaver, TempLoc )

set Leaver = null
set TempLoc = null
endfunction
===========================================================================
function InitTrig_NO_LEFT_AREA takes nothing returns nothing
local region rectRegion
local integer FirstRectId
local rect TempRect
local integer nIndex = 0

set gg_trg_NO_LEFT_AREA = CreateTrigger( )
set bj_lastCreatedHashtable = InitHashtable()

set FirstRectId = GetHandleId(gg_rct________________000) самая первая область которую вы создали на карте.

loop
exitwhen nIndex > 99

call SaveFogStateHandle( bj_lastCreatedHashtable, 0, 0, ConvertFogState( FirstRectId + nIndex ) )
set TempRect = LoadRectHandle( bj_lastCreatedHashtable, 0, 0 )

if TempRect != null then
set rectRegion = CreateRegion()
call RegionAddRect( rectRegion, TempRect )
call TriggerRegisterLeaveRegion(gg_trg_NO_LEFT_AREA, rectRegion, null)
call SaveLocationHandle( bj_lastCreatedHashtable, GetHandleId( rectRegion ), KeyLoc, GetRectCenterLoc( TempRect ) )
endif

set nIndex = nIndex + 1
endloop

call TriggerAddCondition( gg_trg_NO_LEFT_AREA, Condition( function Trig_NO_LEFT_AREA_Conditions ) )
call TriggerAddAction( gg_trg_NO_LEFT_AREA, function Trig_NO_LEFT_AREA_Actions )

set TempRect = null
set rectRegion = null
endfunction
))
Старый 19.09.2014, 13:19
Tobi123

offline
Опыт: 7,826
Активность:
Ну вообще можно тпшать прямо в центр области. В 2 действия
Старый 19.09.2014, 13:19
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
У него 100 областей, и ему не охото делать триггер для каждой области.
Старый 19.09.2014, 13:23
DARGO
На краю вселенной!
offline
Опыт: 5,352
Активность:
quq_CCCP, ой забыл сказать, разобрался, спасибо =)
DARGO добавил:
Tobi123, я бы сказал даже 400 областей))
Старый 20.09.2014, 08:13
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DARGO:
Tobi123, я бы сказал даже 400 областей))
Значит не зря я скинул второй пример с автопоиском областей и регистрации для них события...
Старый 20.09.2014, 08:35
Ответ

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

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

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

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



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