Как отловить цель приказа?
Скажем, у меня есть массив юнитов, каждый отдаёт случайный приказ со случайной целью.
При этом я хочу проверять каждые N секунд тип приказа (это легко, нужно сравнить GetUnitCurrentOrder() с тем, что я хочу. Но как отследить цель этого CurrentOrder? В нативках, насколько я прошарил, есть только GetOrderTarget{Unit/Item/Point}(), но эти функции откликаются на IssuedOrder, то есть на событие отдания приказа.
Но не на текущий приказ.

Принятый ответ

Записываешь в хеш за хендлом юнита отдавшего приказ стрингайди или интеджерайди этого приказа. Нужно настроить систему чтобы 100% записывала любой приказ любого юнита. Когда нужно узнать приказ - выгружаешь стрингайди или интержерайди за хендлом этого юнита. Это ответ на вопрос в шапке.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
16
6 лет назад
Отредактирован Naadir
0

Вот ты, блин, тему прикольную поднял, а знания алгоритмики мне не хватает.
Raised, смотри. Ситуацию максимально подробно обясняю:
Есть юнит1 и юнит2.
Есть предмет1 и предмет2.
Юниты бегут к ближайшему для каждого предмету.
Пусть юнит1 бежит к предмету1, соответственно, предмет1 загружается в массив "затаргеченных". Но тут внезапно на его пути возникает предмет2, и юнит1 перетаргечивается на него, загружая предмет2 в массив "затаргеченных". Я хочу при этом удалить предмет1 из этого массива. Но не понимаю, как. Вероятно, ты подсказываешь мне пути, но я этого не понимаю. Пожалуйста, сформулируй ещё раз твоё решение.
2
20
6 лет назад
2
Naadir, матрица это id юнита, цель. Одна строка на 1 юнита. Перезапишется с помощью БД, которую я скидывал тебе в вопросе с картой (id юнита это value unit). Будет проблема лишь в том, если приказ будет не на предмет, а куда-то ещё.
0
16
6 лет назад
0
DemonoiD, вот то-то и оно.
Там не только предметы. Там точки и юниты. А писать столько кода... Нет уж. Должно быть простое решение.
0
21
6 лет назад
0
Naadir, в Jass могешь?
0
16
6 лет назад
0
Raised, ну так. На уровне продвинутого новичка, но зашарить смогу, думаю. Есть дельная мысль?
2
21
6 лет назад
Отредактирован Raised
2
Записываешь в хеш за хендлом юнита отдавшего приказ стрингайди или интеджерайди этого приказа. Нужно настроить систему чтобы 100% записывала любой приказ любого юнита. Когда нужно узнать приказ - выгружаешь стрингайди или интержерайди за хендлом этого юнита. Это ответ на вопрос в шапке.
Принятый ответ
0
16
6 лет назад
0
Raised, хе, вот и DemonoiD настаивает на таком подходе. Я его понимаю, но вот написать -- нужно время.
Я попробую разобраться с БД и хэш-таблицами.
Но уже, видимо, не сегодня.
Когда получится -- отпишусь.
2
27
6 лет назад
Отредактирован MpW
2
заметил, что не всегда ловит приказы IssuedOrder. Например, что вот отдал приказ продать в магазин, мне приказ IssuedOrder не выдаст.
А вот GetUnitCurrentOrder() выдает order_dropitem = 852001, когда юнит бежит к магазину, чтобы продать. Это как пример. Не надежный, надо еще проверять и координаты. Это что, таймером перебирать собрались группу?
2
21
6 лет назад
Отредактирован Raised
2
Самое забавное что расписывать шаги бессмысленно. Потому что проще уже написать сам алгоритм.

Это что, таймером перебирать собрались группу?
Похоже на то. Есть подозрения что что-то он не так написал, но лень переспрашивать. Ятп., в массив предмет добавляется для того чтоб пока за этим предметом следуют на него не переключались другие юниты?
2
20
6 лет назад
2
Naadir, а если связь многие к многим?
2
27
6 лет назад
Отредактирован MpW
2
-> в массив предмет добавляется для того чтоб пока за этим предметом следуют на него не переключались другие юниты?
  • ну пометку boolean добавляют по handle item (когда перебираешь ближайшим итем, надо проверять и метки). когда на карте 10 артефактов, а все стадо идет за одним ^_^
  • еще можно ссылку в виде item по handle unit, если юнит сдохнет получит или другой приказ, метку с итема можно смело удалять.
  • периодически проверяем, что мобы не стоят
  • если триггером добавляется на карте итем, в группе циклом перебираем и ищем ближайших итемов. заново ищем. это если вдруг бежит раб, и внезапно перед носом появляется, а он бежит дальше
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.