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

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

Ответ
 
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Как отследить юнит-цель приказа?
Очень нужна функция, которая со 100% точностью будет определять юнит-цель для нужного юнита.
В чем сложность:
С одной стороны, можно отлавливать, когда юниту дают какой-то приказ и записывать цель. В этом случае,
а) невозможно отследить, кого юнит начал атаковать по собственной инициативе (без приказа).
б) нужно узнать время, когда юнит прекращает преледовать цель (если та сбежал или умерла).
Проблему б) можно решать при помощи функции GetUnitCurrentOrder. Когда ппрежний приказ изменился на 0, значит прежнее действие прекращено. Но в этом случае тоже возникают казусы.
К примеру наблюдал такой эффект: дал юниту1 приказ атаковать юнит2. Юнит1 подъехал, начал атаку. В это время я даю приказ юниту2 отъехать подальше. Проходит небольшой период времени прежде чем юнит1 пускается в догонку за юнитом2. И ВСЕ ЭТО ВРЕМЯ, пока юнит1 соображает, что нужно преследовать юнит2, функция GetUnitCurrentOrder(юнит1) показывает 0.
Т.е. текущий приказ 0 не гарантирует, что приказ был отменен. А значит таким способом невозможно отследить время окончания приказа.
Я предположил, что возможно, если близзы сделали функцию GetUnitCurrentOrder, то может быть уже есть функция для определения цели. Открыл common.j из war3x.mpq и... Обнаружил, что даже функции GetUnitCurrentOrder в нем нет! Вообще непонятно, что это за функция GetUnitCurrentOrder, откуда она берется.
Итого. Буду благодарен, если вы поможете:
  1. Придумать способ отследить цель юнита
  2. Разобраться, почему функции GetUnitCurrentOrder нету в common.j
Старый 06.08.2006, 16:47
DioD

offline
Опыт: 45,134
Активность:
строка 1635 щас будет система видел на джазокоме найти не могу

DioD добавил:
http://www.wc3jass.com/viewtopic.php?t=194
ношел
Старый 06.08.2006, 16:55
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Sergey, она есть в common.j war3patch.mpq... Видимо ее добавили с каким-либо патчем к Фрозену (с камим именно не знаю, за историей обновления ВЕ не следил).

exploder добавил:
Цитата:
К примеру наблюдал такой эффект: дал юниту1 приказ атаковать юнит2. Юнит1 подъехал, начал атаку. В это время я даю приказ юниту2 отъехать подальше. Проходит небольшой период времени прежде чем юнит1 пускается в догонку за юнитом2. И ВСЕ ЭТО ВРЕМЯ, пока юнит1 соображает, что нужно преследовать юнит2, функция GetUnitCurrentOrder(юнит1) показывает 0.

Sergey, вопрос в догонку. При всем этом мракобесии получает юнит приказ Stop? Или после получения приказа атаки, его текущий приказ становится нолем и остается им все время пока юнит стоит и думает (т.е. не получает stop'a)?

exploder добавил:
DioD, функция предназначена для дебагга, перехвата ордеров, а не целей... В данном случае наверно бесполезна...
Sergey, может по мимо приказа проеверять изменяется ли коодрината юнита. Хм, данных о цели не даст, но можно хотя бы будет узнать догоняет ли юнит цель...
...
Имхо можно сделать так. Создать триггер по событию атаки. При этом сохранить последнюю цель юнита. При этом проверить был ли дан приказ атаковать или юнит, атаковал по собственной инициативе (сохранив перед этом айди последнего полученного юнитом приказа).
Старый 06.08.2006, 17:43
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Цитата:
Sergey, вопрос в догонку. При всем этом мракобесии получает юнит приказ Stop? Или после получения приказа атаки, его текущий приказ становится нолем и остается им все время пока юнит стоит и думает (т.е. не получает stop'a)?

Нет, приказ Stop не поступает. Вообще отловить можно только приказы, отданные игроком. Сотальные игра не отлавливает - в этом и проблема.

При этом текущий приказ может стать нулевым и по другой причине. Например, если юнит Б умрет, сбежит, станет неуязвимым или невидимым. В это время наш юнит А может переключиться на самостоятельную атаку еще какого-то юнита - вообщем будет путаница.

Цитата:
Sergey, она есть в common.j war3patch.mpq... Видимо ее добавили с каким-либо патчем к Фрозену (с камим именно не знаю, за историей обновления ВЕ не следил).

Я уже искал, но не обнаружил там common.j :(

Sergey добавил:
DioD
Спасибо.

Но система, увы, не подойдет, т.к. не отлавливает целей, которые юнит выбирает самостоятельно.
Старый 06.08.2006, 19:26
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Sergey, значит у тебя неполные файллисты. Попробуй добавить common.j в список файлов в (listfile). Странно я открываю W3ModelEditor'ом, он находит common.j в war3patch.mpq... Поисчи файллисты поновее...
Цитата:
При этом текущий приказ может стать нулевым и по другой причине. Например, если юнит Б умрет, сбежит, станет неуязвимым или невидимым. В это время наш юнит А может переключиться на самостоятельную атаку еще какого-то юнита - вообщем будет путаница.

Жуть, но всеже проверив все условия, может быть можно что то сделать? Вот только эта пауза, жуть, она очень мешает. В момент паузы никак наверно не отследить будет ли потом юнит атаковать, или останется стоять на месте...
Старый 06.08.2006, 21:11
DioD

offline
Опыт: 45,134
Активность:
В опен доте есть аи модуль...
Он делает именно то что тебе надо...
Старый 06.08.2006, 21:40
Ответ

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

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

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

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



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