Сейчас 11:44:10 Четверг, 28 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Декорации и Триггер (Декорации и Триггер)
Декорации и Триггер
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 :D

Тискаю клаву... остальных пока некогда!
 

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: она нерабочая, но ты можешь посмотреть и сравнить со своим вариантом решения (может получиться у тебя кое-что?!). Каждое действие я описал в триггерах. :D


Тискаю клаву... остальных пока некогда!


Сообщение отредактировал 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
Блокировки:
можно натыкать даммиков с "жаром преисподней" / "пламенем феникса" / настроенной авто-атакой
и отлавливать урон получаемый главным персонажем (или несколькими)

тут сразу можно обойтись без периодиков
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Декорации и Триггер (Декорации и Триггер)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz