Сейчас 14:35:26 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Событие ака "Юнит Двигается" (Нужно событие или условие, которые проверяют, ходит ли юнит)
Событие ака "Юнит Двигается"
FatalBladeДата: Четверг, 05 Января 2012, 21:09:49 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Мне нужно имитировать обычную атаку герою, у которого нету обычной атаки. К тому же я настроил что бы если героя атакуют, то он сам юзал приказ "smart" на атакующего.

Когда вы кликаете правой кнопкой по местности, герой начинает туда идти. Полученный приказ = "smart". Но не в этом суть. Приказ получается юнитом 1 раз, и герой идёт в указанную точку, а когда доходит - останавливается. Раньше я думал, что когда он останавливается, юнит получает приказ "stop", но оказывается - в данном случае нету приказа. Проверить, двигается ли юнит в данный момент невозможно...

Таймером тоже не возможно, потому что юниту можно приказать идти хоть в конец карты. А мне нужно, что бы пока юнит ходит, если конечно это был принудительный приказ, то есть правой кнопкой по местности, то он не отвлекался на юнитов которые атакуют его по дороге.

Вообщем как проверить, двигается ли юнит в данный момент?




Сообщение отредактировал FatalBlade - Четверг, 05 Января 2012, 21:47:46
 

Fox3Дата: Четверг, 05 Января 2012, 22:44:50 | Сообщение # 2
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
Ну если юнит двигается, то у него меняется координата.
Отслеживать координату
 

FatalBladeДата: Четверг, 05 Января 2012, 22:48:39 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Fox3)
Отслеживать координату

И? Что мне делать с этой координатой? С чем сравнивать?


 

Fox3Дата: Четверг, 05 Января 2012, 22:55:12 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
С предыдущей координатой) Каждые 0.2 секунды получать координату персонажа, записывать её в переменную 1, Сравнивать переменную 1 с переменной 2, если координата изменилась, то приравнять переменную 2 к переменной 1 и выполнить нужное тебе действие, если при сравнении значения одинаковые, ничего не делать. Как-то так

Сообщение отредактировал Fox3 - Четверг, 05 Января 2012, 22:55:34
 

FatalBladeДата: Пятница, 06 Января 2012, 15:13:50 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Сделал вот так:
Code

     local integer uid
     local unit un
     local group g = CreateGroup()
     local real x1
     local real y1
     local real x2
     local real y2

       set un = FirstOfGroup(udg_MagesGroup)
       exitwhen un == null
         set uid = GetHandleId(un)
         call GroupRemoveUnit( udg_MagesGroup, un )
         call GroupAddUnit( g, un )
         set x1 = LoadReal(udg_Hash, uid, 460)
         set y1 = LoadReal(udg_Hash, uid, 461)
         set x2 = GetWidgetX(un)
         set y2 = GetWidgetY(un)
         if x1 == x2 and y1 == y2 then
             (Тут мои действия)
         elseif x1 != x2 or y1 != y2 then
             (Тут тоже мои действия)
         endif
         call SaveReal(udg_Hash, uid, 460, x2)
         call SaveReal(udg_Hash, uid, 461, y2)
     endloop

     loop
       set un = FirstOfGroup(g)
       exitwhen un == null
         set uid = GetHandleId(un)
         call GroupRemoveUnit( g, un )
         call GroupAddUnit( udg_MagesGroup, un )
       endloop

     call DestroyGroup(g)
     set g = null
     set un = null


Как можно улучшить этот код ради производительности? По максимуму. Тут событие периодический таймер 0.2
Вроде фильтром можно, но как это сделать?


 

lawsonДата: Пятница, 06 Января 2012, 15:21:26 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Вроде фильтром можно, но как это сделать?

Вместо цикла, в группе при пике udg_MagesCreeps напиши просто filter(function FilterFunction) создай функцию FilterFunction и там в функции делай все действия с юнитами.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Пятница, 06 Января 2012, 15:24:54
 

FatalBladeДата: Пятница, 06 Января 2012, 15:39:21 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Вместо цикла, в группе при пике udg_MagesCreeps напиши просто filter(function FilterFunction) создай функцию FilterFunction и там в функции делай все действия с юнитами.

Офигеть... У меня при этом ВЕ вылетел.


 

SirNikolasДата: Пятница, 06 Января 2012, 15:50:45 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Потому что надо не "filter", а "Filter".

А JNGP практически не вылетает.


 

Fox3Дата: Пятница, 06 Января 2012, 15:51:08 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
 

SirNikolasДата: Пятница, 06 Января 2012, 15:51:31 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Да, и FilterFunction должна возвращать false.

 

FatalBladeДата: Пятница, 06 Января 2012, 15:57:14 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Какая функция нужна вообще? Для вызова
call Что здесь писать?(udg_MagesGroup, Filter(function FilterFunction))


 

SirNikolasДата: Пятница, 06 Января 2012, 16:09:14 | Сообщение # 12
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ничего, lawson перепутал. Фильтры используются при наборе юнитов в группу.

 

lawsonДата: Пятница, 06 Января 2012, 17:04:30 | Сообщение # 13
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (SirNikolas)
Фильтры используются при наборе юнитов в группу.

Ну так правильно, пикнуть юнита и делать с ним действия внутри фильтра при этом вернуть false. Или я чета не так понял?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Пятница, 06 Января 2012, 17:08:29 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
lawson, есть уже готовая группа udg_MagesGroup. Никого пикать не надо.

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Событие ака "Юнит Двигается" (Нужно событие или условие, которые проверяют, ходит ли юнит)
  • Страница 1 из 1
  • 1
Поиск:

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