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

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

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

16
UPD: хотя возможно, я просто накривокодил, и поэтому у меня не работает.
GetOrderTarget работает, чтобы проверить цель текущего приказа?
17
ты хош узнать какой приказ юнит выполняет? так незя
19
Naadir, можно создать матрицу и записывать туда приказы и если ты стал целью чего-то приказа. Например "атакован"
16
DemonoiD, да, я думал об этом, но это такой костыль.
ledoed, можно узнать, какой приказ выполняет юнит.
19
Naadir, очень маленький и не сильно тратящий ресурсы костыль. Есть ещё вариант с баффом, но кто его наложил движок может и не выдавать.
16
DemonoiD
А что если проверять углы? Углы и приказы. По идее, если на карте нет препятствий, юниты будут идти напрямую к точке приказа.
19
Naadir, да. Но если юниты выстроены в линию? То что ты называешь костылем - более точную инфу даёт, чем твоя идея.
16
DemonoiD, я пытаюсь писать умных крестьян, подбирающих предметы. Но при смене приказа в такой матрице предмет всё равно останется. Если же удалять их динамично, то будут возникать баги.
19
Naadir, нет, если обнулять при подборе, выставляя в матрицу null значения. Или только для неперемещаемых объектов использовать координаты х,у предмета-приказа. Тогда ты поймешь, что он бежит к предмету.
И чтобы посчитать кол-во крестьян на куст, нужно перебрать весь массив крестьян с х,у = х,у предмета. При смерти крестьянина обнуляя естественно переменную.
16
DemonoiD, если миньон меняет цель, т.е. бежал сначала к одному объекту, а затем к другому, то они оба запишутся в матрицу. А подтереть первый нельзя, т.к. не отлавливается смена приказа.
21
Записывай в хеш/массив текущий приказ юнита. Потом выгружай.
16

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

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