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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
20
6 лет назад
2
Naadir, можно создать матрицу и записывать туда приказы и если ты стал целью чего-то приказа. Например "атакован"
0
16
6 лет назад
0
DemonoiD, да, я думал об этом, но это такой костыль.
ledoed, можно узнать, какой приказ выполняет юнит.
0
20
6 лет назад
0
Naadir, очень маленький и не сильно тратящий ресурсы костыль. Есть ещё вариант с баффом, но кто его наложил движок может и не выдавать.
0
16
6 лет назад
0
DemonoiD
А что если проверять углы? Углы и приказы. По идее, если на карте нет препятствий, юниты будут идти напрямую к точке приказа.
0
20
6 лет назад
0
Naadir, да. Но если юниты выстроены в линию? То что ты называешь костылем - более точную инфу даёт, чем твоя идея.
0
16
6 лет назад
0
DemonoiD, я пытаюсь писать умных крестьян, подбирающих предметы. Но при смене приказа в такой матрице предмет всё равно останется. Если же удалять их динамично, то будут возникать баги.
0
20
6 лет назад
0
Naadir, нет, если обнулять при подборе, выставляя в матрицу null значения. Или только для неперемещаемых объектов использовать координаты х,у предмета-приказа. Тогда ты поймешь, что он бежит к предмету.
И чтобы посчитать кол-во крестьян на куст, нужно перебрать весь массив крестьян с х,у = х,у предмета. При смерти крестьянина обнуляя естественно переменную.
0
16
6 лет назад
0
DemonoiD, если миньон меняет цель, т.е. бежал сначала к одному объекту, а затем к другому, то они оба запишутся в матрицу. А подтереть первый нельзя, т.к. не отлавливается смена приказа.
0
21
6 лет назад
0
Записывай в хеш/массив текущий приказ юнита. Потом выгружай.
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). Будет проблема лишь в том, если приказ будет не на предмет, а куда-то ещё.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.