Декорации и Триггер
|
|
Fenc | Дата: Четверг, 03 Сентября 2015, 12:06:18 | Сообщение # 1 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 1
Блокировки:
| Не знаю, есть ли решение этой проблемы или нет. У меня ловушка декорация в виде шипов. Расставил их в одной длинной комнате в огромном множестве. Задумка такая - юниту из комнаты надо осторожно выйти, не наступая на них. Если наступит - они активируются и пронзят его. Проблема вот в чем: не могу никак найти оптимальный вариант в триггерах. Нужно чтобы ловушка активировалась при его близкому нахождению к декорации. Создавать области к каждой ловушке - это не вариант. Их там около пятидесяти. Потом еще расписывать каждую в триггере. Можно как-то ограничиться минимальными действиями?
Mike
|
|
|
|
Samedy_ | Дата: Четверг, 03 Сентября 2015, 12:22:38 | Сообщение # 2 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Цитата Fenc ( ) Не знаю, есть ли решение этой проблемы или нет. У меня ловушка декорация в виде шипов. Расставил их в одной длинной комнате в огромном множестве. Задумка такая - юниту из комнаты надо осторожно выйти, не наступая на них. Если наступит - они активируются и пронзят его. Проблема вот в чем: не могу никак найти оптимальный вариант в триггерах. Нужно чтобы ловушка активировалась при его близкому нахождению к декорации. Создавать области к каждой ловушке - это не вариант. Их там около пятидесяти. Потом еще расписывать каждую в триггере. Можно как-то ограничиться минимальными действиями? Можно использовать юнита в качестве декорации.
|
|
|
|
Kaotika | Дата: Четверг, 03 Сентября 2015, 12:25:29 | Сообщение # 3 |
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
| Могу сделать на jass
Тискаю клаву... остальных пока некогда!
|
|
|
|
Fenc | Дата: Четверг, 03 Сентября 2015, 12:34:06 | Сообщение # 4 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 1
Блокировки:
| На гуи не получится?( Добавлено (03 Сентября 2015, 12:34:06) --------------------------------------------- Я думаю, что решение должно быть в действии pick every in region and do action. Но вот довести до оптимального варианта не получается никак.
Mike
|
|
|
|
Kaotika | Дата: Четверг, 03 Сентября 2015, 12:34:39 | Сообщение # 5 |
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
| сейчас подумаем
Тискаю клаву... остальных пока некогда!
|
|
|
|
Fenc | Дата: Четверг, 03 Сентября 2015, 12:39:30 | Сообщение # 6 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 1
Блокировки:
| Был такой вариант - Создал регион, который охватывает все шипы. Проходит время каждую секунду - все декорации группируются в этой области. Далее If then else - если юнит находится в группируемой декорации - он умирает. Но вот проблема - от того, что игра каждую секунду группирует эти декорации она с каждой секундой начинает все больше и больше тормозить. До тех пор, пока не вылетит XD
Mike
|
|
|
|
Kaotika | Дата: Четверг, 03 Сентября 2015, 13:51:18 | Сообщение # 7 |
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
| я долго думал над этим, вот моя наработка. Ps: она нерабочая, но ты можешь посмотреть и сравнить со своим вариантом решения (может получиться у тебя кое-что?!). Каждое действие я описал в триггерах.
Тискаю клаву... остальных пока некогда!
Сообщение отредактировал Kaotika - Четверг, 03 Сентября 2015, 13:52:15 |
|
|
|
Samedy_ | Дата: Четверг, 03 Сентября 2015, 14:16:09 | Сообщение # 8 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Почему все-таки не использовать юнита??
|
|
|
|
Borodach | Дата: Четверг, 03 Сентября 2015, 15:06:58 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Fenc, Как вариант: Использовать юнита, дать ему урон в 0-1 ед. и при событии атакован пронзать шипами
Karamba
|
|
|
|
Samedy_ | Дата: Четверг, 03 Сентября 2015, 15:09:15 | Сообщение # 10 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Цитата Fenc ( ) Спасибо большое. Сейчас гляну. А с юнитами кста те же проблемы, что и с декорациями( Не понял. Позицию юнита ведь можно отследить, так в чем проблема?
|
|
|
|
Волчачка | Дата: Четверг, 03 Сентября 2015, 15:22:26 | Сообщение # 11 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата Kaotika ( ) я долго думал над этим, вот моя наработка. Ps: она нерабочая, но ты можешь посмотреть и сравнить со своим вариантом решения (может получиться у тебя кое-что?!). Каждое действие я описал в триггерах. Мало того, что она создаёт автоматически кучу ректов, так ещё не рабочая. Когда можно было указать несколько maxX_N,MaxY_N,MinX_N и inY_N, и проверять одной функцией с if'ами каждую сек. Когда юнит в зоне декора смирти. Выбрать декорации вкоруг боевой единицы. Возродить их, ведь у них есть анимка birth, а потом снова их убить. И юнит трупак.
Код function Trig_TriggerEventConstants_Func006Func002C takes nothing returns boolean if ( not ( GetDestructableTypeId(GetEnumDestructable()) == udg_DestructableType ) ) then return false endif return true endfunction
function Trig_TriggerEventConstants_Func006A takes nothing returns nothing // сам фильтр if ( Trig_TriggerEventConstants_Func006Func002C() ) then // установил позиции фильтрованных декоров set udg_GetDestructableX = GetDestructableX( GetEnumDestructable( ) ) set udg_GetDestructableX = GetDestructableY( GetEnumDestructable( ) ) // добавил событие в триггер Actions... ( а оно вообще добавилось ?! ) call TriggerRegisterEnterRectSimple( gg_trg_Actions, Rect(( udg_GetDestructableX - udg_DestructableRadius ), ( udg_GetDestructableY - udg_DestructableRadius ), ( udg_GetDestructableX + udg_DestructableRadius ), ( udg_GetDestructableY + udg_DestructableRadius )) ) else endif endfunction
function Trig_TriggerEventConstants_Actions takes nothing returns nothing // Тип декорации set udg_DestructableType = 'LTex' // Радиус контакта set udg_DestructableRadius = 160.00 // выбераем всех декоров, присутствующих на карте call EnumDestructablesInRectAll( GetPlayableMapRect(), function Trig_TriggerEventConstants_Func006A ) endfunction
//=========================================================================== function InitTrig_TriggerEventConstants takes nothing returns nothing set gg_trg_TriggerEventConstants = CreateTrigger( ) call TriggerAddAction( gg_trg_TriggerEventConstants, function Trig_TriggerEventConstants_Actions ) endfunction
set udg_GetDestructableX = GetDestructableX( GetEnumDestructable( ) ) set udg_GetDestructableX = GetDestructableY( GetEnumDestructable( ) )
|
|
|
|
Kaotika | Дата: Четверг, 03 Сентября 2015, 15:47:28 | Сообщение # 12 |
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
| Цитата Волчачка ( ) set udg_GetDestructableX = GetDestructableX( GetEnumDestructable( ) ) set udg_GetDestructableX = GetDestructableY( GetEnumDestructable( ) )
бывает))) Ну такс он попросил на ГУИ и вот оно.. А я в гуи НЕ ПРИВЫК работать. Моя невнимательность
Добавлено (03 Сентября 2015, 15:40:41) --------------------------------------------- Цитата Borodach ( ) Как вариант: Использовать юнита, дать ему урон в 0-1 ед. и при событии атакован пронзать шипами ну так, шипы у него декор
Добавлено (03 Сентября 2015, 15:41:41) --------------------------------------------- Цитата Волчачка ( ) Мало того, что она создаёт автоматически кучу ректов, так ещё не рабочая. Кстати, я думал не работала из-за того, что я обнулял и удалял ректы, поэтому убрал эти действия.Добавлено (03 Сентября 2015, 15:47:28) ---------------------------------------------
Цитата Samedy_ ( ) Не понял. Позицию юнита ведь можно отследить, так в чем проблема? А если юнитов на карте много?
Тискаю клаву... остальных пока некогда!
Сообщение отредактировал Kaotika - Четверг, 03 Сентября 2015, 15:46:34 |
|
|
|
Волчачка | Дата: Четверг, 03 Сентября 2015, 16:03:14 | Сообщение # 13 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата Kaotika ( ) Кстати, я думал не работала из-за того, что я обнулял и удалял ректы, поэтому убрал эти действия. А ещё куча регионов тоже не круто. Конечно лучше засунуть в один регион кучу ректов - профит. Но лучше работать с мин и макс. точками x,y real меньше памяти требуется.
|
|
|
|
Волчачка | Дата: Четверг, 03 Сентября 2015, 16:37:41 | Сообщение # 14 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата Fenc ( ) Как скинуть скрин? Я немного подправил свою косячную наработку. Вроде все работает, но есть минус - нельзя, чтобы юнит долго находился в области. Иначе с каждой секундой игра все больше и больше будет тормозить вплоть до глюков и вылетов. Залей на savepic.ru, а потом пришли сюда ссылку на скриншот.
|
|
|
|
Samedy_ | Дата: Четверг, 03 Сентября 2015, 18:02:47 | Сообщение # 15 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| imgur.com ЖЕ, НУ
|
|
|
|
Samedy_ | Дата: Пятница, 04 Сентября 2015, 07:54:34 | Сообщение # 16 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Может тут лучше сделать Ждать пока...? А вообще, тут же дали идеальный советЦитата Волчачка ( ) Когда можно было указать несколько maxX_N,MaxY_N,MinX_N и inY_N, и проверять одной функцией с if'ами каждую сек. Когда юнит в зоне декора смирти. Выбрать декорации вкоруг боевой единицы. Возродить их, ведь у них есть анимка birth, а потом снова их убить. И юнит трупак.
|
|
|
|
Волчачка | Дата: Пятница, 04 Сентября 2015, 14:38:58 | Сообщение # 17 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата Fenc ( ) http://imgur.com/eDqvcBD Кстати, способ действенный, но там многовато утечек будет. И интервал времени можно чуточку больше сделать, - скажем ка: 0.5 сек. А их надо убирать.
Хотя, я бы выполнил так: Код function fDestr takes nothing returns boolean return GetDestructableTypeId(GetFilterDestructable()) == $44547370 endfunction
function eDestr takes nothing returns nothing set udg_dCount = udg_dCount + 1 endfunction
function xDestr takes nothing returns nothing local destructable d = GetEnumDestructable() call SetDestructableAnimationSpeed( d, 4.00 ) call DestructableRestoreLife( d, 100., true ) set d = null endfunction
function yDestr takes nothing returns nothing local destructable d = GetEnumDestructable() call SetDestructableAnimationSpeed( d, 1.00 ) call KillDestructable(d) set d = null endfunction
function EnumDestructablesAtUnit takes unit u, real radius returns nothing local real x = GetWidgetX(u) local real y = GetWidgetY(u) local rect r = Rect( x-radius, y - radius, x + radius, y + radius ) local filterfunc ff = Filter(function fDestr) call EnumDestructablesInRect(r,ff,function eDestr ) call RemoveRect(r) call DestroyFilter(ff) set r = null set ff = null endfunction
function KillUnitInDestr takes unit u, real radius returns nothing local real x = GetWidgetX(u) local real y = GetWidgetY(u) local rect r = Rect( x-radius, y - radius, x + radius, y + radius ) local filterfunc ff = Filter(function fDestr) call EnumDestructablesInRect(r,ff,function xDestr ) call KillUnit(u) call TriggerSleepAction(3.) call EnumDestructablesInRect(r,ff,function yDestr ) call RemoveRect(r) call DestroyFilter(ff) set r = null set ff = null endfunction
Сообщение отредактировал Волчачка - Пятница, 04 Сентября 2015, 14:54:44 |
|
|
|
Fenc | Дата: Понедельник, 07 Сентября 2015, 08:50:28 | Сообщение # 18 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 1
Блокировки:
| Всем большое спасибо за помощь и за ответы. Всё работает идеально) Тему можно закрывать.
Mike
|
|
|
|
Extremator | Дата: Понедельник, 07 Сентября 2015, 09:41:07 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| можно натыкать даммиков с "жаром преисподней" / "пламенем феникса" / настроенной авто-атакой и отлавливать урон получаемый главным персонажем (или несколькими)
тут сразу можно обойтись без периодиков
|
|
|
|