DARGO
На краю вселенной!
offline
Опыт:
5,352Активность: |
проблема с зонами
На карте существет около 100 областей. Как сделать, чтобы если юнит покидает одну из этих областей, его тпшит в центр покинутой области? Я конечно знаю, что можно сделать отдельный триггер для каждой зоны, но можно ли все сделать коротко в 1-2триггера? Без джасса |
18.09.2014, 14:48 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
DARGO, можно вовсе в 1 триггере
на каждую зону событие что юнит эту зону покинул, в хештаблицу запиши при этом на ID ивента координаты центра зоны, и тепелпортируй юнитов хот за телепортируйся. |
18.09.2014, 14:52 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DARGO
На краю вселенной!
offline
Опыт:
5,352Активность: |
quq_CCCP, плиз подробнее про хеш, я с ними дело никогда не имел. Как отловить коры центра области? |
18.09.2014, 14:58 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
вот код:
» пример кода 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 не прилагается. |
18.09.2014, 15:33 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
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 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Tobi123
offline
Опыт:
7,826Активность: |
Ну вообще можно тпшать прямо в центр области. В 2 действия |
19.09.2014, 13:19 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
У него 100 областей, и ему не охото делать триггер для каждой области. |
19.09.2014, 13:23 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DARGO
На краю вселенной!
offline
Опыт:
5,352Активность: |
|
20.09.2014, 08:13 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
DARGO:
Значит не зря я скинул второй пример с автопоиском областей и регистрации для них события... |
20.09.2014, 08:35 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|