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, откуда она берется.
Итого. Буду благодарен, если вы поможете:
|
06.08.2006, 16:47 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
строка 1635 щас будет система видел на джазокоме найти не могу
DioD добавил: http://www.wc3jass.com/viewtopic.php?t=194 ношел |
06.08.2006, 16:55 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Sergey, она есть в common.j war3patch.mpq... Видимо ее добавили с каким-либо патчем к Фрозену (с камим именно не знаю, за историей обновления ВЕ не следил).
exploder добавил: Цитата:
Sergey, вопрос в догонку. При всем этом мракобесии получает юнит приказ Stop? Или после получения приказа атаки, его текущий приказ становится нолем и остается им все время пока юнит стоит и думает (т.е. не получает stop'a)? exploder добавил: DioD, функция предназначена для дебагга, перехвата ордеров, а не целей... В данном случае наверно бесполезна... Sergey, может по мимо приказа проеверять изменяется ли коодрината юнита. Хм, данных о цели не даст, но можно хотя бы будет узнать догоняет ли юнит цель... ... Имхо можно сделать так. Создать триггер по событию атаки. При этом сохранить последнюю цель юнита. При этом проверить был ли дан приказ атаковать или юнит, атаковал по собственной инициативе (сохранив перед этом айди последнего полученного юнитом приказа). |
|
06.08.2006, 17:43 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sergey
Старейший
offline
Опыт:
44,363Активность: |
Цитата:
Нет, приказ Stop не поступает. Вообще отловить можно только приказы, отданные игроком. Сотальные игра не отлавливает - в этом и проблема. При этом текущий приказ может стать нулевым и по другой причине. Например, если юнит Б умрет, сбежит, станет неуязвимым или невидимым. В это время наш юнит А может переключиться на самостоятельную атаку еще какого-то юнита - вообщем будет путаница. Цитата:
Я уже искал, но не обнаружил там common.j :( Sergey добавил: DioD Спасибо. Но система, увы, не подойдет, т.к. не отлавливает целей, которые юнит выбирает самостоятельно. |
||
06.08.2006, 19:26 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Sergey, значит у тебя неполные файллисты. Попробуй добавить common.j в список файлов в (listfile). Странно я открываю W3ModelEditor'ом, он находит common.j в war3patch.mpq... Поисчи файллисты поновее...
Цитата:
Жуть, но всеже проверив все условия, может быть можно что то сделать? Вот только эта пауза, жуть, она очень мешает. В момент паузы никак наверно не отследить будет ли потом юнит атаковать, или останется стоять на месте... |
|
06.08.2006, 21:11 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
В опен доте есть аи модуль...
Он делает именно то что тебе надо... |
06.08.2006, 21:40 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|